【问题标题】:creating a class that can receive board1[{1,1}]='X'; ? (curly brackets inside square brackets)创建一个可以接收 board1[{1,1}]='X' 的类; ? (方括号内的大括号)
【发布时间】:2018-10-12 08:03:57
【问题描述】:

我得到了 H.W.我想在 main.cpp 的其中一行中支持:

board1[{1,1}]='X';

这背后的逻辑含义是将字符'X'分配给“游戏板”在(1,1)的位置。我不知道如何创建一个接收大括号的数组,例如 [{int,int}]。

我该怎么做?

附: 因为这些是符号而不是字符(并且因为我不认识属于这个问题的任何术语)所以在谷歌中搜索这种类型的问题非常困难,所以这可能是重复的 :-( ,希望不是。

我尝试过:

第一次尝试:

vector<vector<int> > matrix(50);
for ( int i = 0 ; i < matrix.size() ; i++ )
    matrix[i].resize(50);
matrix[{1,1}]=1;

第二次尝试:

int mat[3][3];
//maybe map
mat[{1,1}]=1;

第三次尝试:

class _mat { // singleton
    protected:
       int i ,j;

    public:
        void operator [](string s)
        {
            cout << s;
        }
};

_mat mat;
string s = "[{}]";
mat[s]; //this does allow me to do assignment also the parsing of the string is a hustle

【问题讨论】:

  • 你熟悉运算符重载吗?
  • 不要只要求我们做你的功课而不发布你尝试过的东西。它会比朝鲜的核计划更快地被否决。
  • @UKMonkey 嘿,我不是要求做我的硬件。这只是硬件的一小部分,我也没有要求解决它只是为了知道我应该如何处理它......我将添加我试图做的那部分。顺便说一句,我同意你的观点,人们不应该只要求别人做他们的硬件,我只是想解释为什么我的情况不同。
  • @StoryTeller 是的,但假设这也会重载括号和赋值运算符......(我也不确定我是否应该进行重载)但现在我将检查如何重载两个运算符一起
  • {} 是此类 en.cppreference.com/w/cpp/utility/initializer_list 的快捷方式,如果您打算专门重载运算符;但它也可以传递给其他类的构造函数(见下面的答案)

标签: c++ brackets curly-braces square-bracket


【解决方案1】:

您需要执行以下操作:

    struct coord {
        int x;
        int y;
    };

    class whatever
    {
        public:
            //data being what you have in your board
            data& operator[] (struct coord) {
                //some code
            }
    };

【讨论】:

    【解决方案2】:

    您的第一次尝试非常接近实际工作。问题是向量的 [] 运算符将整数索引放入要更改的向量中的位置(并且向量必须足够大才能存在)。但是,您想要的是地图;这将创建该项目并为您分配它。因此,std::map&lt;std::vector&lt;int&gt;, char&gt; 可以满足您的需求。 (虽然它可能没有最好的性能)。

    您的第二次尝试失败的原因与第一次相同(索引必须是整数),第三次由 Tyker 的回答纠正。

    【讨论】:

    • 使用 std::pair 或 std::tuple 作为映射键可能更合适,因为板上的每个位置都具有相同的维度数。
    • @SeanBurton 使用自定义类可能更合适;但是因为下面的例子证明了这一点;我正在回答以提高对为什么尝试不起作用的理解我没有看到提及它的意义。
    猜你喜欢
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 2021-04-27
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    相关资源
    最近更新 更多