【问题标题】:Capacity of vector increases after inserting an element?插入元素后向量的容量增加?
【发布时间】:2018-03-22 21:20:57
【问题描述】:

我真的是 C++ 新手,我刚刚开始尝试它。这是我刚刚经历的一些代码:

#include <iostream>
#include <vector>

int main() {

   std::vector<int> v;
   std::cout << "Capacity of v is " << v.capacity() << '\n';

   v.resize (100);
   std::cout << "Capacity of v after resize is " << v.capacity() << '\n';

   v.insert (v.begin(), 2);
   std::cout << "Capacity of v after insert is " << v.capacity() << '\n';
}

我得到以下输出:

v的容量为0 调整大小后 v 的容量为 100 插入后 v 的容量为 200

现在,我了解到当容量变得太小时,向量会重新分配自己,例如由于插入。但我以为我有100个容量?而现在我只想插入 2。为什么 2 不适合 100 的容量?好像没看懂。

【问题讨论】:

  • 如果你想增加更多的容量,那就是reserve,而不是resize
  • 因为resize已经有100个元素了
  • 哦!我才意识到这一点。非常感谢你。好像我把这两个混为一谈了。真的很抱歉!
  • 在您的resize(100); 之后添加这一行:for(const auto &amp;it:v) std::cout&lt;&lt;it&lt;&lt;" "; 并运行程序。你会明白,为什么。
  • 在你的示例代码中,除了看v.capacity(),还要看v.size()。这样会更清楚v.resize(100)的作用是什么。

标签: c++ vector


【解决方案1】:

也许你对std::vector::resize 的作用感到困惑。

它缩小或扩大对象,使其具有给定函数的大小。通过使用

v.resize (100);

您要求将 v 的大小调整为 100 个元素。之后,调用

v.insert (v.begin(), 2);

对象的大小将是 101。如果当前容量小于 101,则需要增加容量。

也许您打算使用std::vector::reserve。如有必要,它会增加对象的容量,但不会增加其大小。

【讨论】:

    猜你喜欢
    • 2020-08-11
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多