Minoru
05.02.2012 13:50 antaeus
А как так получается, что vector< vector<int> * > m не ломается, когда я делаю m.push_back(new vector<int>), а потом m[i]→push_back(x)? Ведь последняя команда должна приводить к ресайзу вектора, что поломает все указатели на него, т.е. после этого m должен содержать неправильный указатель. Но эксперименты (for j = 0; j < 51200; j++) m[1]→push_back(j)) показали, что m это каким-то образом обрабатывает (или мне просто повезло). Так вообще можно писать, или есть вариант получше (*не* boost)?
ресайз вектора vector<int> ломает итераторы на его элементы, счего m[i] должен меняться то?
Из документации по vector::push_back[1]:
> This effectively increases the vector size by one, which causes a reallocation of the internal allocated storage if the vector size was equal to the vector capacity before the call. Reallocations invalidate all previously obtained iterators, references and pointers.
> Reallocations invalidate all previously obtained iterators, references and pointers.
Т.к. во «внешнем» векторе хранятся именно указатели, добавление элементов во «внутренние» вектора должны ломать указатели. Или я что-то упускаю?
1. http://www.cplusplus.com/reference/stl/v...
во внешнем векторе хранится указатель на объект типа vector<int>, как изменение объекта, хранящегося по этому указателю приведёт к изменению адреса, по которому он хранится? При ресайзе изняется внутренний указатель, а не внещний.
А, чёрт! Я таки упустил из виду то, что данные как бы «обёрнуты» в объект-vector. Спасибо!
ну ты ппц