C++ std::vector resize()仅在清除()后起作用
我有一个向量对象:C++ std::vector resize()仅在清除()后起作用,c++,vector,resize,C++,Vector,Resize,我有一个向量对象: std::vector<std::vector<MyClass>> _matrix; 然后: _matrix.resize(_rows, std::vector<MyReal>(_colms)); _matrix.resize(_rows,std::vector(_colms)); 当然,我正在丢失数据。(对我来说没关系) 这是预期的行为吗?来自以下文档: _Val:如果新大小大于原始大小,则添加到向量的新元素的值 只有新行才能获得
std::vector<std::vector<MyClass>> _matrix;
然后:
_matrix.resize(_rows, std::vector<MyReal>(_colms));
_matrix.resize(_rows,std::vector(_colms));
当然,我正在丢失数据。(对我来说没关系)
这是预期的行为吗?来自以下文档:
_Val:如果新大小大于原始大小,则添加到向量的新元素的值
只有新行才能获得带有附加列的向量(std::vector(\u colms)
)<代码>调整大小不会更改现有行
更新:要正确调整整个向量的大小,请迭代现有行并调整这些向量的大小,然后添加新行。像这样的方法应该会奏效:
for (size_t i = 0; i < _matrix.size(); i++)
_matrix[i].resize(_colms);
_matrix.resize(_rows, std::vector<MyReal>(_colms));
for(size_t i=0;i<_matrix.size();i++)
_矩阵[i]。调整大小(_colms);
_调整大小(_行,std::vector(_列));
实际上,只有矩阵的colmumns大小不会因resize命令而改变。我原来的问题是错的。实际上,只有_矩阵的colmumns大小不会因resize命令而改变。正如我附带指出的,我认为以下划线开头的变量是为编译器保留的,如果不使用它们,可能会更好。如果我错了,请更正。我使用下划线表示类私有成员。我认为这是传统的做法。@Tomas如果它们以双下划线或下划线和大写字母开头,那么它们是保留的。你说得对。有没有办法将大小调整到新的矩形大小?好的,我现在了解了调整大小的功能。在我的例子中,当我不介意丢失数据时,使用clear()更简单。谢谢
_matrix.resize(_rows, std::vector<MyReal>(_colms));
for (size_t i = 0; i < _matrix.size(); i++)
_matrix[i].resize(_colms);
_matrix.resize(_rows, std::vector<MyReal>(_colms));