【问题标题】:std::vector resize() works only after clear()std::vector resize() 仅在 clear() 之后有效
【发布时间】:2010-09-26 00:01:32
【问题描述】:

我有一个矢量对象:

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)); 

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

这是预期的行为吗?

【问题讨论】:

  • 实际上只有_matrix的列大小不会被resize命令改变。
  • 我原来的问题错了。实际上只有 _matrix 的列大小不会被 resize 命令改变。
  • 作为我的旁注,我认为以下划线开头的变量是为编译器保留的,如果你不使用它们可能会更好。如果我错了,请纠正我。
  • 我将下划线用于类私有成员。我认为这是传统的。
  • @Tomas 如果它们以双下划线或下划线和大写字母开头,则保留它们

标签: c++ vector resize


【解决方案1】:

来自vector::resize 的文档:

_Val:如果新大小大于原始大小,则添加到向量中的新元素的值。

只有新行才能获得带有附加列的向量 (std::vector&lt;MyReal&gt;(_colms))。 resize 不会更改现有行。

更新:要正确调整整个向量的大小,请遍历现有行并调整这些向量的大小,然后添加新行。像这样的东西应该可以工作:

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

【讨论】:

  • 你是对的。有没有办法调整到新的矩形大小?
  • 好的,我现在明白了调整大小的功能。就我而言,当我不介意丢失数据时,使用 clear() 更简单。谢谢。
猜你喜欢
  • 1970-01-01
  • 2020-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-15
相关资源
最近更新 更多