我在尝试填充多维数组m [4] [4] [3] [3]时遇到了问题。 这些实际上是我已经知道的16个3x3矩阵,我试图填补这些矩阵。这样做的正确方法是什么?我收到一个错误:“16:在'{'token'之前预期的primary-expression
请帮忙。
#include<iostream>
using namespace std;
int main()
{
int m[4][4][3][3];//0,1,2,3 HLUT
m[0][0]={1,0,1,
1,1,1,
1,0,1};
m[0][1]={1,1,1,
0,1,0,
1,1,1};
m[0][2]={1,0,1,
1,1,1,
1,0,1};
m[0][3]={1,1,1,
0,1,0,
1,1,1};
m[1][0]={1,0,0,
1,0,0,
1,1,1};
m[1][1]={0,0,1,
0,0,1,
1,1,1};
m[1][2]={1,1,1,
0,0,1,
0,0,1};
m[1][3]={1,1,1,
1,0,0,
1,0,0};
m[2][0]={1,0,1,
1,0,1,
1,1,1};
m[2][1]={1,1,1,
0,0,1,
1,1,1};
m[2][2]={1,1,1,
1,0,1,
1,0,1};
m[2][3]={1,1,1,
1,0,0,
1,1,1};
m[3][0]={1,1,1,
0,1,0,
0,1,0};
m[3][1]={1,0,0,
1,1,1,
1,0,0};
m[3][2]={0,1,0,
0,1,0,
1,1,1};
m[3][3]={0,0,1,
1,1,1,
0,0,1};
}
答案 0 :(得分:1)
您不能像这样初始化多维数组。如果你想这样做,就这样做:
#include<iostream>
using namespace std;
int main()
{
int m[4][4][3][3] = {1,0,1, //1
1,1,1,
1,0,1,
1,1,1, //2
0,1,0,
1,1,1,
1,0,1, //3
1,1,1,
1,0,1,
// ...
// ...
1,0,1, //16
1,1,1,
1,0,1};
for(int i=0;i<4;++i)
for(int j=0;j<4;++j) {
for(int p=0;p<3;++p) {
for(int q=0;q<3;++q)
std::cout<<m[i][j][p][q];
std::cout<<std::endl;
}
std::cout<<std::endl;
}
}
或者使用4个for
循环来分配您的数组。您必须始终记住,多维数组只不过是内存中的单维数组,因此只需将其初始化为单维。
答案 1 :(得分:1)
这样做的正确方法是什么?
您可以使用以下选项之一:
0
。然后逐个设置元素的值。std::vector
代替普通旧数组。std::array
代替普通旧数组。方法1:初始化所有元素
int main()
{
int m[4][4][3][3] =
{
1,0,1,
1,1,1,
1,0,1,
1,1,1,
0,1,0,
1,1,1,
1,0,1,
1,1,1,
1,0,1,
1,1,1,
0,1,0,
1,1,1,
1,0,0,
1,0,0,
1,1,1,
0,0,1,
0,0,1,
1,1,1,
1,1,1,
0,0,1,
0,0,1,
1,1,1,
1,0,0,
1,0,0,
1,0,1,
1,0,1,
1,1,1,
1,1,1,
0,0,1,
1,1,1,
1,1,1,
1,0,1,
1,0,1,
1,1,1,
1,0,0,
1,1,1,
1,1,1,
0,1,0,
0,1,0,
1,0,0,
1,1,1,
1,0,0,
0,1,0,
0,1,0,
1,1,1,
0,0,1,
1,1,1,
0,0,1
};
}
方法2:分配给各个元素
int main()
{
int m[4][4][3][3] = {};
m[0][0][0][0] = 1;
m[0][0][0][1] = 0;
m[0][0][0][2] = 1;
...
m[3][3][2][0] = 0;
m[3][3][2][1] = 0;
m[3][3][2][2] = 1;
}
方法3:使用std::vector
#include <vector>
int main()
{
std::vector<int> m1(3);
std::vector<decltype(m1)> m2(3, m1);
std::vector<decltype(m2)> m3(4, m2);
std::vector<decltype(m3)> m(4, m3);
m[0][0][0] = {1, 0, 1};
m[0][0][1] = {1, 1, 1};
m[0][0][2] = {1, 0, 1};
...
m[3][3][0] = {0, 0, 1};
m[3][3][1] = {1, 1, 1};
m[3][3][2] = {0, 0, 1};
return 0;
}
方法4:使用std::array
#include <array>
int main()
{
std::array<int, 3> m1;
std::array<decltype(m1), 3> m2;
std::array<decltype(m2), 4> m3;
std::array<decltype(m3), 4> m;
m[0][0][0] = {1, 0, 1};
m[0][0][1] = {1, 1, 1};
m[0][0][2] = {1, 0, 1};
...
m[3][3][0] = {0, 0, 1};
m[3][3][1] = {1, 1, 1};
m[3][3][2] = {0, 0, 1};
return 0;
}
答案 2 :(得分:0)
m[0][0]={1,0,1,
1,1,1,
1,0,1};
实际上是在尝试将9 int
s的单维数组分配给3 int
s的二维数组。
将您的初始声明更改为
int m[4][4][9]