C ++ 11 — Инициализация трехмерного вектора в классе C ++

Используя следующий код, я хотел бы перемещать многомерный вектор в различных направлениях. К сожалению, сразу после инициализации я получаю ошибку EXC_BAD_ACCESS.

Направление: значения от 0 до 2 для x, y и z движения

Шаги: только -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;

}
}

-1

Решение

Ваш код (с векторами) работает. Живой пример. Попробуйте добавить пробел между двумя > приметы (>>) и проверьте, помогает ли это.

Другой способ инициализировать вектор — использовать std :: initializer_list, например так:

    std::vector<std::vector<std::vector<int>>> myVec =
{
{
{ 0, 1 },
{ 2, 3}
},
{
{ 4, 5 },
{ 6, 7 }
}
};

Живой пример № 2

2

Другие решения


По вопросам рекламы [email protected]