C++ C++;:创建结构的二维数组

C++ C++;:创建结构的二维数组,c++,arrays,multidimensional-array,struct,int,C++,Arrays,Multidimensional Array,Struct,Int,我有一个结构 struct playerProbs { int probPlayer1; int probPlayer2; }; 和一个二维阵列 playerRobs killChart[11][11]= 我正在尝试向数组每个位置的每个结构中的probPlayer1和probPlayer2中添加值。所有的值都不同。我想知道最快、最高效的代码处理方法是什么 我看过一些例子,但它们似乎都非常非常耗时。 谢谢你的时间 编辑:当前代码 struct playerProbs { int

我有一个结构

struct playerProbs {
int probPlayer1;
int probPlayer2;
};
和一个二维阵列
playerRobs killChart[11][11]=

我正在尝试向数组每个位置的每个结构中的
probPlayer1
probPlayer2
中添加值。所有的值都不同。我想知道最快、最高效的代码处理方法是什么

我看过一些例子,但它们似乎都非常非常耗时。 谢谢你的时间

编辑:当前代码

    struct playerProbs {
    int probPlayer1;
    int probPlayer2;
};

playerProbs killChart[11][11];

killChart[0][0].probPlayer1 = 30; //getting an error saying size of array 
killChart[0][0].probPlayer2 = 30; //must be bigger than 0

您只填充一个非常小的数据集,因此只需使用嵌套的for循环

for(int i(0); i < 11; ++i)
    for(int j(0) j < 11; ++j)
        killChart[i][j].probPlayer1 = x;
        killChart[i][j].probPlayer2 = y;
    }
}
可以运行的完整代码(样本量小得多,只有2x2数组)如下所示:(我不想键入所有121个值,这演示了使用它的两种方法。)


您只填充一个非常小的数据集,因此只需使用嵌套的for循环

for(int i(0); i < 11; ++i)
    for(int j(0) j < 11; ++j)
        killChart[i][j].probPlayer1 = x;
        killChart[i][j].probPlayer2 = y;
    }
}
可以运行的完整代码(样本量小得多,只有2x2数组)如下所示:(我不想键入所有121个值,这演示了使用它的两种方法。)


另一种选择是使用大括号初始化

struct playerProbs {
    int probPlayer1;
    int probPlayer2;
};

playerProbs killChart[11][11] = {
    { {1, 2}, {3, 4}, {5, 6}, {7, 8}, ... }, // 11 { , }s
    { {4, 7}, {3, 5}, {0, 4}, {1, 6}, ... },
    ...                                      // x11
}

尽管正如Chris所说,在11x11元素上可能很难阅读。

另一种选择是使用大括号初始化

struct playerProbs {
    int probPlayer1;
    int probPlayer2;
};

playerProbs killChart[11][11] = {
    { {1, 2}, {3, 4}, {5, 6}, {7, 8}, ... }, // 11 { , }s
    { {4, 7}, {3, 5}, {0, 4}, {1, 6}, ... },
    ...                                      // x11
}


尽管正如Chris所说,在11x11个元素上可能很难读取。

那么您想填充这个2d数组吗?因为您只有121个元素(实际上什么都没有),所以只需使用双嵌套for循环即可。到目前为止,这是最容易编码的,而使用如此小的n的效率是无关紧要的。(你已经有了O(n)效率)。你用什么来编译这个?我刚刚运行了你发布的“当前代码”,它运行得非常好。我使用的是Visual Studio 2010,所以你想填充这个2d阵列吗?因为您只有121个元素(实际上什么都没有),所以只需使用双嵌套for循环即可。到目前为止,这是最容易编码的,而使用如此小的n的效率是无关紧要的。(你已经有了O(n)效率)。你用什么来编译这个?我刚刚运行了你发布的“当前代码”,它运行得非常好。我使用的是Visual Studio 2010。我想我的问题用错了词。例如
killChart[0][0]=probPlayer1.x=.3 probPlayer1.y=.3
different@BeccaBohem你是如何决定这些价值观的?如果您希望在编译时分配静态值,那么您可能需要对其进行长期编码。否则,如果您使用某种算法来确定这些值,那么您可能会找到一种方法,将其作为i&j的函数,并让for循环为您指定数字。否则,您是否可以提供关于它们如何被使用的任何信息,这些信息将与填充它们的值的其他方式相关?我相信我将不得不进行长期操作,因为这些值背后没有押韵或原因,您能否给我一个示例,说明我如何为
killChart[0][0]输入值
值为
probPlayer1=30,probPlayer2=30
?在很久以前我还没有编码C++,而且在计算它方面有困难,难道你不能在多维数组中使用括号初始化吗?()@vu1p3n0x您绝对可以,但是我认为这种用法的可读性要高得多。(嵌套大括号初始化会变得非常混乱,通常需要更长的时间才能完成,因为您经常会失去位置。)(尤其是对于必须声明结构值的情况,[您需要一个构造函数])老实说,我可能会编写一个脚本来键入语法,而您只需以任意一种方式输入值。我想我的问题用错了词。例如
killChart[0][0]=probPlayer1.x=.3 probPlayer1.y=.3
different@BeccaBohem你是如何决定这些价值观的?如果您希望在编译时分配静态值,那么您可能需要对其进行长期编码。否则,如果您使用某种算法来确定这些值,那么您可能会找到一种方法,将其作为i&j的函数,并让for循环为您指定数字。否则,您是否可以提供关于它们如何被使用的任何信息,这些信息将与填充它们的值的其他方式相关?我相信我将不得不进行长期操作,因为这些值背后没有押韵或原因,您能否给我一个示例,说明我如何为
killChart[0][0]输入值
值为
probPlayer1=30,probPlayer2=30
?在很久以前我还没有编码C++,而且在计算它方面有困难,难道你不能在多维数组中使用括号初始化吗?()@vu1p3n0x您绝对可以,但是我认为这种用法的可读性要高得多。(嵌套大括号初始化会变得非常混乱,通常需要更长的时间才能完成,因为您经常会失去位置。)(尤其是对于必须声明结构值的情况,[您需要一个构造函数])老实说,我可能会编写一个脚本来键入语法,您只需以任意一种方式输入值。您还必须为probPlayer1成员和probPlayer2成员赋值。(killChart是一个结构数组,而不是int)您需要为PlayerRobs声明一个构造函数来分配值。如果visual studio 2010具有正确的c++11聚合初始化,则您不需要该构造函数,但我不相信VS2010 for c++11,您还必须为probPlayer1成员和probPlayer2成员分配值。(killChart是一个结构数组,而不是整数)您需要为PlayerRobs声明一个构造函数来分配值。如果visual studio 2010具有正确的c++11聚合初始化,则您不需要该构造函数,但我不相信VS2010中的c++11