std :: vector resize()仅在clear()之后有效

San*_*ich 1 c++ resize vector clear

我有一个矢量对象:

std::vector<std::vector<MyClass>> _matrix;
Run Code Online (Sandbox Code Playgroud)

它是带有一些数据的二维数组.当我尝试使用以下方法调整尺寸时:

_matrix.resize(_rows, std::vector<MyReal>(_colms)); //_rows and _colms are ints
Run Code Online (Sandbox Code Playgroud)

该命令对该对象没有任何作用.所以为了调整大小,我必须首先打电话给:

_matrix.clear();
Run Code Online (Sandbox Code Playgroud)

然后:

_matrix.resize(_rows, std::vector<MyReal>(_colms)); 
Run Code Online (Sandbox Code Playgroud)

当然,我正在丢失数据.(在我的情况下没关系)

这是预期的行为吗?

cas*_*nca 5

来自以下文档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));
Run Code Online (Sandbox Code Playgroud)