2D-вектора не существует. Дело в том, что вы можете создать вектор, содержащий векторы. Первый вектор используется в качестве индекса в собранных векторах.
Обратите внимание, что эта концепция аналогична 2D-массиву: arr[3][4]
означает 3 индекса, каждый из которых указывает на 4 данных.
Чтобы создать такой 2D-вектор:
std::vector< std::vector <float>> positions.
Обратите внимание, что я не использовал второй параметр (как в std::vector<float, SomeAllocator>
, потому что нам не нужен этот специальный распределитель памяти.
Также обратите внимание, что в отличие от массивов, я ничего не сказал о размерах каждого вектора, потому что std :: vector позаботится об этом.
Давайте заполним его.
"main" вектор содержит векторы. Таким образом, эти вторичные векторы могут быть созданы перед сохранением в «основном».
std::vector<float> v1; //secondary
positions.push_back(v1); //add it to main vector
Поместите некоторые значения во вторичный:
v1.push_back(7.5);
v1.push_back(-3.1);
Другой способ - получить доступ через главный вектор. Если мы создадим новый, этот главный вектор содержит v1
в своем первом индексе:
positions[0].push_back(8.); // same as v1.push_back(8.) if positions[0] refers to v1
или лучше, используя "at": positions.at(0).push_back(8.);
Измените какое-то значение:
v1.at(1) = 66.88;
или
positions[0].at(1) = 66.88;
Вы также можете использовать v1[1] = 66.88
, но предпочитаете метод at()
потому что он проверит, что индекс "1" разрешен размером вектора v1.
Вы можете создать и добавить еще один вторичный вектор:
std::vector<float> v2; //secondary
positions.push_back(v2); //add it to main vector
и работать с ним так же, как с предыдущим v1
. Теперь positions[1]
относится к v2
Остальную часть работы с другими векторами оставляю вам.