gpt4 book ai didi

c++ - 在基于范围的 for 循环中从容器中删除元素

转载 作者:可可西里 更新时间:2023-11-01 15:55:51 26 4
gpt4 key购买 nike

我想从基于范围的 for 循环中当前正在使用的容器中删除一个元素。这会导致未定义的行为吗?或者如果我没有调用 erase()erase() 之后 element 的下一个值是否会是下一个元素应该是什么? ?

例子:

std::map<int, int> someMap;
/* Fill in someMap */
for (auto& element : someMap)
{
/* ... */
if ( /* Some condition */ )
someMap.erase(element.first);
}

最佳答案

这应该是一个未定义的行为。因为根据 14882/2011,基于范围的 for 语句等同于:

auto && __range = range-init;
for ( auto __begin = begin-expr(__range),
__end = end-expr(__range);
__begin != __end;
++__begin ) {
for-range-declaration = *__begin;
statement
}

关于c++ - 在基于范围的 for 循环中从容器中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8624686/

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