gpt4 book ai didi

c++ - pop_back() 是否真的使 std::vector 上的 *all* 迭代器无效?

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

std::vector<int> ints;

// ... fill ints with random values

for(std::vector<int>::iterator it = ints.begin(); it != ints.end(); )
{
if(*it < 10)
{
*it = ints.back();
ints.pop_back();
continue;
}
it++;
}

此代码无效,因为调用 pop_back() 时, 无效。但我没有找到任何文档讨论 std::vector::pop_back() 中迭代器的失效。

你有相关链接吗?

最佳答案

调用pop_back()删除 vector 中的最后一个元素,因此该元素的迭代器无效。 pop_back() 调用不会使最后一个元素之前的项目的迭代器无效,只有重新分配才会这样做。来自 Josuttis 的“C++ 标准库引用”:

Inserting or removing elements invalidates references, pointers, and iterators that refer to the following element. If an insertion causes reallocation, it invalidates all references, iterators, and pointers.

关于c++ - pop_back() 是否真的使 std::vector 上的 *all* 迭代器无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62340/

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