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)?

c++, ?
1. Sany 05.02.2012 14:45 Home

ресайз вектора vector<int> ломает итераторы на его элементы, счего m[i] должен меняться то?

2. MinoruSany /1 05.02.2012 14:57 antaeus

Из документации по 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...

3. SanyMinoru /2 05.02.2012 15:01 Home

во внешнем векторе хранится указатель на объект типа vector<int>, как изменение объекта, хранящегося по этому указателю приведёт к изменению адреса, по которому он хранится? При ресайзе изняется внутренний указатель, а не внещний.

4. MinoruSany /3 05.02.2012 15:03 antaeus

А, чёрт! Я таки упустил из виду то, что данные как бы «обёрнуты» в объект-vector. Спасибо!

5. dorfe 05.02.2012 17:21

ну ты ппц

Do you really want to delete ?