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

时间:2010-09-26 00:01:33

标签: c++ vector resize clear

我有一个矢量对象:

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

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

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

此命令对该对象不执行任何操作。 所以为了调整大小,我必须首先打电话给:

_matrix.clear();

然后:

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

当然,我正在丢失数据。 (就我而言,没关系)

这是预期的行为吗?

1 个答案:

答案 0 :(得分: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));