在 C++ 中初始化三维向量 Class
Initializing a Three Dimensional Vector in a C++ Class
使用下面的代码,我想在各个方向上移动一个多维向量。不幸的是,在初始化之后我得到了一个 EXC_BAD_ACCESS 错误。
方向:x、y 和 z 移动的值从 0 到 2
步数:仅 -1 和 1(后退、前进)
容器:多维向量
if (verMove(direction, steps)==true) {
std::vector<int> val(4,0);
std::vector<std::vector<int>> val2(4,val); /// ERROR
std::vector<std::vector<std::vector<int>>> newContainer(4,val2);
// Move in X Direction
for (int a=0; a<4; a++) {
for (int b=0; b<4; b++) {
for (int c=0; c<4; c++) {
int d;
if (steps<0)
d=3;
else
d=0;
switch (direction) {
case 0:
if (c==d)
newContainer[a][b][c] = 0;
else if (steps>0)
newContainer[a][b][c] = this->container[a][b][c-1];
else
newContainer[a][b][c] = this->container[a][b][c+1];
break;
case 1:
if (b==d)
newContainer[a][b][c] = 0;
else if (steps>0)
newContainer[a][b][c] = this->container[a][b-1][c];
else
newContainer[a][b][c] = this->container[a][b+1][c];
break;
case 2:
if (a==d)
newContainer[a][b][c] = 0;
else if (steps>0)
newContainer[a][b][c] = this->container[a-1][b][c];
else
newContainer[a][b][c] = this->container[a+1][b][c];
break;
}
}
}
}
replaceContainer(newContainer);
} else {
return;
}
}
您的代码(带向量)有效。 Live example。尝试在两个 >
符号 (>>
) 之间添加 space 并检查是否有帮助。
另一种初始化向量的方法是像这样使用 std::initializer_list:
std::vector<std::vector<std::vector<int>>> myVec =
{
{
{ 0, 1 },
{ 2, 3}
},
{
{ 4, 5 },
{ 6, 7 }
}
};
使用下面的代码,我想在各个方向上移动一个多维向量。不幸的是,在初始化之后我得到了一个 EXC_BAD_ACCESS 错误。
方向:x、y 和 z 移动的值从 0 到 2
步数:仅 -1 和 1(后退、前进)
容器:多维向量
if (verMove(direction, steps)==true) {
std::vector<int> val(4,0);
std::vector<std::vector<int>> val2(4,val); /// ERROR
std::vector<std::vector<std::vector<int>>> newContainer(4,val2);
// Move in X Direction
for (int a=0; a<4; a++) {
for (int b=0; b<4; b++) {
for (int c=0; c<4; c++) {
int d;
if (steps<0)
d=3;
else
d=0;
switch (direction) {
case 0:
if (c==d)
newContainer[a][b][c] = 0;
else if (steps>0)
newContainer[a][b][c] = this->container[a][b][c-1];
else
newContainer[a][b][c] = this->container[a][b][c+1];
break;
case 1:
if (b==d)
newContainer[a][b][c] = 0;
else if (steps>0)
newContainer[a][b][c] = this->container[a][b-1][c];
else
newContainer[a][b][c] = this->container[a][b+1][c];
break;
case 2:
if (a==d)
newContainer[a][b][c] = 0;
else if (steps>0)
newContainer[a][b][c] = this->container[a-1][b][c];
else
newContainer[a][b][c] = this->container[a+1][b][c];
break;
}
}
}
}
replaceContainer(newContainer);
} else {
return;
}
}
您的代码(带向量)有效。 Live example。尝试在两个 >
符号 (>>
) 之间添加 space 并检查是否有帮助。
另一种初始化向量的方法是像这样使用 std::initializer_list:
std::vector<std::vector<std::vector<int>>> myVec =
{
{
{ 0, 1 },
{ 2, 3}
},
{
{ 4, 5 },
{ 6, 7 }
}
};