Я создал класс, который имитирует массив 3D bool, сохраняя данные в массиве 1D и перегружая () operator
. Я уже пробовал каждый подход я мог бы найти и думать и в то время как, например, этот кусок кода:Цитирование через 3d-индексный массив 1d в C++
bool operator()(unsigned x, unsigned y, unsigned z) const { return _data[_zSize*_ySize*x + y*_ySize + z]; }
позволяет мне получить доступ к каждому элементу мне нужно (я знаю, что (х, у, г) здесь фактически (z, y, x), но это не зависит от меня), я сталкиваюсь с проблемами, когда пытаюсь выполнить итерацию по массиву. Рассмотрим 3D-массив глубины: 3, высота: 4 и ширина 5, каждый элемент инициализируется значением false. Когда я пытаюсь перевернуть все значения в массиве (где sx()
возвращает depth
, sy()
- height
, sz()
- width
)
for (unsigned i = 0; i < x.sx(); ++i)
for (unsigned j = 0; j < x.sy(); ++j)
for (unsigned k = 0; k < x.sz(); ++k)
x(i, j, k) = !x(i, j, k);
я получаю следующий результат (две остальные поверхности выглядеть одинаково):
11110
01110
01110
01111
Таким образом, очевидно, что некоторые элементы доступны и обращаются дважды. Шаблон меняется, когда я пытаюсь использовать различные методы индексирования массива. В чем проблема?
'y * _ySize' должно быть, должно быть' y * _zSize' – Jarod42