Когда вы объявляете 2D-массивы, они хранятся в смежных ячейках памяти, и это легко, поскольку число строк фиксируется при их объявлении.
В то время как когда мы объявляем 2D-вектор vector<vector<int>> v
, как это происходит? это работает. Так как количество рядов совсем не фиксировано. Моим первым предположением было то, что новый вектор, в который вы помещаете push_back, распределяется случайным образом, но даже если это не сработает, так как эти векторы int доступны в произвольном порядке.
Мое первое предположение состоит в том, чтобы произвольно распределить векторы int в памяти и сохранить их адрес в другом векторе адресов. например,
vector<vector<int>> vmain;
vector<int> a = {1, 2, 3};
vector<int> b = {1, 2, 3};
vector<int> c = {1, 2, 3};
vmain.push_back(a);
vmain.push_back(b);
vmain.push_back(c);
хранится что-то похожее на
vector<&vector<int>> vmain; //vector of pointer to vector
vector<int> a = {1, 2, 3};
vector<int> b = {1, 2, 3};
vector<int> c = {1, 2, 3};
vmain.push_back(&a);
vmain.push_back(&b);
vmain.push_back(&c);
Пожалуйста, скажите мне, если это правильный путь.
А также для вектора карт или наборов vector<map<int, int>> v1
и vector<set<int>> v2
. Размер карт и наборов не фиксирован.