gpt4 book ai didi

c++ - 为什么这个实现中的 push_back 保留 2 * capacity + 1 而不是 2 * capacity?

转载 作者:行者123 更新时间:2023-12-03 06:55:58 26 4
gpt4 key购买 nike

我正在查看 vectorhttps://www.cs.odu.edu/~zeil/cs361/sum18/Public/vectorImpl/index.html 上的实现.

在1.3.1下,显示:

if( theSize == theCapacity ) ➀
reserve( 2 * theCapacity + 1 ); ➁

我想知道,为什么要保留 2 * theCapacity + 1 而不是 2 * theCapacity

std::vector 中,当 vector 的大小等于容量时,它只是将容量加倍,而您正在尝试执行追加操作。我不太明白这里 +1 的目的。

最佳答案

C++ 标准没有指定 std::vector 需要如何增长大小。加倍是一种常见的实现1,可能是出于懒惰而不是其他原因。 +1 也是为了避免容量为零的问题,如果使用零参数调用 vector::reserve ,或者如果您的实现默认构造一个零容量 std::vector


1 就我个人而言,我认为使用斐波那契数列增加容量可能更自然,尽管我从未遇到过这样的 std::vector 实现.

关于c++ - 为什么这个实现中的 push_back 保留 2 * capacity + 1 而不是 2 * capacity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64145009/

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