我有一个矢量对象:
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));
当然,我正在丢失数据。 (就我而言,没关系)
这是预期的行为吗?
答案 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));