#c #vector
#c #вектор
Вопрос:
Для 2d-вектора я знаю, что могу пойти:
vector<vector<T>> vec;
vec = vector<vector<T>> (boardSize, vector<T>(boardSize));
Но как мне это сделать для 3D-вектора?
Я пытался
vector<vector<vector<T>>> vec;
vec = vector<vector<vector<T>>> (boardSize, boardSize, vector<T>(boardSize));
Но он не будет компилироваться. Есть идеи?
Комментарии:
1. Не было бы проще просто иметь a
vector<T>
и сделать его размер произведением всех измерений? Затем оберните его в класс, который преобразует несколько индексов в один индекс? Это было бы намного проще, чем то, что вы пытаетесь сделать. Или просто используйте Boost. Многомассивный.2. @NicolBolas Почему сложно использовать 3D-векторы? Я использовал 2D векторы без драматизма. Не спорю, просто интересно, я довольно новичок в этом. 🙂
3. Потому что нет такого понятия, как «3D вектор» или «2D вектор». Это просто вектор, который просто так получилось, что содержит другой вектор. Память, выделяемая этими объектами, не является непрерывной. Кроме того, вам нужно вручную изменять размер каждого вложенного вектора. Это просто большая проблема.
Ответ №1:
Просто предположение:
vec = vector<vector<vector<T>>> (boardSize, vector<vector<T>>(boardSize, vector<T>(boardSize)));
Это означает, что когда вы объявили a vector<vector<T>>
, вторым аргументом должен быть a vector<T>
; и когда вы объявили a vector<vector<vector<T>>>
, вторым аргументом должен быть a vector<vector<T>>
, который, в свою очередь, должен быть таким, как в первом случае.
Комментарии:
1. Я думаю.. Я думаю, что люблю тебя. 🙂
Ответ №2:
Вероятно, лучше всего было бы этого не делать. Создайте класс, который предлагает интерфейс 3D-вектора (с некоторыми изменениями) и внутренне использует вектор одного измерения.