Резервирование элементов в трехмерном векторе c ++ - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть 3d-контейнер:

 std::vector<int, std::vector<std::vector<double>>> myVec;

, который я хочу иметь размеры [n + 1] [3 * (n + 10) +1] [16 * (n + 10) +1].Я хочу зарезервировать это пространство в векторе быстро и без слишком большого количества других функций спагетти, чтобы я мог эмулировать динамический трехмерный массив.Как бы я это сделал?

1 Ответ

0 голосов
/ 22 сентября 2018

Резерв или размер?

http://www.cplusplus.com/reference/vector/vector/reserve/ http://www.cplusplus.com/reference/vector/vector/resize/

Демонстрация изменения размера с помощью конструктора:

#include <iostream>
#include <vector>
using namespace std;

template <class T>
void printSize(T v) {
    cout<<v.size()<<endl;
}
int main(){
    int n = 1;//Initial n value;
    int d1 = n+1, d2 = 3+(n+10)+1, d3 = 16*(n+10)+1;
    vector<vector<vector<int>>> i3D(d1,vector<vector<int>>(d2,vector<int>(d3)));
    //i3D.resize(d1,vector<vector<int>>(d2,vector<int>(d3)));
    printSize(i3D);
    printSize(i3D[0]);
    printSize(i3D[0][0]);
    return 0;
}

В моем примере яизменить размер с помощью конструктора.Вы можете сделать то же самое, используя метод изменения размера.
С другой стороны, для резервирования потребуется (насколько мне известно) использование циклов и резервной памяти на массив (все).

Считается, что этовопрос изменения размера, потому что вы указали предустановленные размеры для размеров x, y и z.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...