C++ 标准向量 resize() 函数

Had*_*adi 7 c++ resize stdvector

resize() 根据给定的大小添加/删除元素。Reserve() 保留内存空间,它不会重新分配内存。我的问题是 resize 是否也与向量的容量相同,只是不会增加?

要添加,将组合:

 std::vector<X> vector;
 vector.reserve(5);
 vector.resize(5); 
Run Code Online (Sandbox Code Playgroud)

有道理吗?是多余的吗?这里的目标是能够覆盖向量中的值,而无需向量分配任何额外空间。

wal*_*lly 8

这个网站

  • resize():这使您可以将矢量的大小更改为您想要的任何大小。
    • 它将用元素填充底层缓冲区。
  • reserve():这会改变向量的容量。请注意,这不会更改向量的大小,它只会更改底层缓冲区的大小,以便在必须调整缓冲区大小之前为缓冲区的扩展提供更多空间。与调用不同resize(),这不会改变程序的行为,只会改变性能(保留空间的后续使用不会因增量保留而导致性能损失)。
    • 它不会限制缓冲区的大小。如果缓冲区空间不足,它将根据需要自动重新分配。

在此处输入图片说明

我的问题是 resize 是否也与向量的容量相同,只是不会增加?要添加,将组合:

 std::vector<X> vector;
 vector.reserve(5);
 vector.resize(5);
Run Code Online (Sandbox Code Playgroud)

有道理吗?是多余的吗?

vector.reserve(5); 在这种情况下将是多余的。

这里的目标是能够覆盖向量中的值,而无需向量分配任何额外空间。

对于这个目标,它取决于你想如何覆盖这些值。

  • 如果您打算直接通过索引写入,那么您必须使用resize().
  • 如果您正在使用push_back(),那么reserve()会更好,这样您就可以避免创建X两次。

请记住,用于自动预订的算法是实现定义的。有关性能方面的更多信息,请参见此处