std :: vector resize () работает только после clear () - PullRequest
1 голос
/ 26 сентября 2010

У меня есть векторный объект:

std::vector<std::vector<MyClass>> _matrix;

Это 2d массив с некоторыми данными. Когда я пытаюсь изменить размеры с:

_matrix.resize(_rows, std::vector<MyReal>(_colms)); //_rows and _colms are ints

эта команда просто ничего не делает с объектом. Поэтому, чтобы изменить его размер, я должен сначала позвонить:

_matrix.clear();

, а затем:

_matrix.resize(_rows, std::vector<MyReal>(_colms)); 

Конечно, я теряю данные. (В моем случае это не имеет значения)

Это ожидаемое поведение?

1 Ответ

5 голосов
/ 26 сентября 2010

Из документов на vector::resize:

_Val: значение новых элементов, добавляемых в вектор, если новый размер больше исходного размера.

Только новые строки получают векторы с дополнительными столбцами (std::vector<MyReal>(_colms)).resize не изменит существующие строки.

Обновление: Чтобы правильно изменить размер всего вектора, переберите существующие строки и измените размеры этих векторов, затем добавьте новые строки.Примерно так должно работать:

for (size_t i = 0; i < _matrix.size(); i++)
  _matrix[i].resize(_colms);
_matrix.resize(_rows, std::vector<MyReal>(_colms));
...