gpt4 book ai didi

c++ - pop_back() 可以减少 vector 的容量吗? (C++)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:57:47 31 4
gpt4 key购买 nike

根据C++标准,是std::vector<T>::pop_back()曾经允许减少 vector 的容量吗?

我问是因为我想得到保证,以下代码不会抛出内存不足异常:

my_vec.pop_back();
if (...)
my_vec.push_back(...);

假设my_vec是一个 std::vector<int> .

我猜有三种可能:

  1. 是的,根据 C++03 和 C++11 这可能发生。

  2. 不,C++11 禁止这样做(但 C++03 不禁止)。

  3. 不可以,C++03 和 C++11 都禁止这样做。

是的,我的问题与Does std::vector.pop_back() change vector's capacity?有关,但我的问题具体是关于标准保证的内容。

另请注意,Does std::vector.pop_back() change vector's capacity? 中已接受的答案主要是关于如何减少 vector 的容量,而不是关于何时保证不会发生,并且没有提供任何证据来证明其关于 pop_back() 的声明。

最佳答案

根据 http://en.cppreference.com/w/cpp/container/vector/pop_back

No iterators or references except for back() and end() are invalidated.

因此它可能不会重新分配。该页面上没有 C++11 标记,这意味着在 03 中也是如此。我将挖掘部分引用并对其进行编辑以确保完整性。

编辑:更好:来自 C++03:[lib.container.requirements] (23.1),第 10 段:

no erase(), pop_back() or pop_front() function throws an exception.

N3337 (~C++11) 中 23.2.1/10 的相同措辞。

关于c++ - pop_back() 可以减少 vector 的容量吗? (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23764785/

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