gpt4 book ai didi

C++ 设置迭代器删除

转载 作者:可可西里 更新时间:2023-11-01 16:38:56 26 4
gpt4 key购买 nike

是否允许删除迭代器指向的元素,并在一行中推进相同的迭代器以转到下一个元素?

set<int>::iterator it = S.begin();
while (it != S.end()) {
if (shouldBeRemoved(*it)) {
S.erase(it++); // is this line valid?
} else {
++it;
}
}

最佳答案

Is it allowed to erase an element pointed by iterator, and advance the same iterator in one line to go to next element?

是的,它是有效的。


理由:

it++ 递增 it 以便它引用下一个元素但产生其拷贝原始值。因此,it 不引用调用 erase() 时删除的元素。在 std::set 的情况下,只有被删除元素的迭代器是无效的。#1

您可以将此代码示例视为样板代码,用于删除迭代器所引用的元素。


引用资料:

对于std::set
#1C++03 标准 23.1.2/8:

Only iterators and references to the erased elements are invalidated

关于C++ 设置迭代器删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10033567/

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