gpt4 book ai didi

C++ 标准 vector resize() 函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:59:19 27 4
gpt4 key购买 nike

resize() 根据给定的大小添加/删除元素。 reserve() 保留内存空间,不会重新分配内存。我的问题是 resize 是否也像 vector 的容量一样工作,只会不增加?

要添加,将组合:

 std::vector<X> vector;
vector.reserve(5);
vector.resize(5);

有意义吗?它是多余的吗?这里的目标是能够覆盖 vector 中的值,而无需 vector 分配任何额外空间。

最佳答案

来自 this site :

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

enter image description here

The question I have is whether resize also works the same as in the capacity of the vector will only not increase? To add, would a combination of :

 std::vector<X> vector;
vector.reserve(5);
vector.resize(5);

make any sense? Is it redundant?

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

The goal here is to be able to overwrite values in the vector without having the vector allocate any extra space.

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

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

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

关于C++ 标准 vector resize() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37196329/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com