![]() |
1
105
几乎。
您最初拥有的将增加迭代器 两次 如果您确实从中删除了一个元素,那么您可能会跳过需要删除的元素。 这是一种常见的算法,我在很多地方都看到过它的使用和记录。 [编辑]正确的做法是,在擦除后迭代器无效,但只有引用被擦除元素的迭代器,其他迭代器仍然有效。因此,在erase()调用中使用iter+。 |
![]() |
2
64
删除std::map(和其他容器)的“if”我使用下面的模板来处理这个问题。
这不会返回任何内容,但会从std::map中删除这些项。 使用实例:
第二个示例(允许您传递测试值):
|
![]() |
3
3
我从 excellent SGI STL reference :
所以,指向要删除的元素的迭代器当然会失效。这样做:
|
![]() |
4
2
原始代码只有一个版本:
这里
|
![]() |
5
1
从下面的注释: http://www.sgi.com/tech/stl/PairAssociativeContainer.html 成对关联容器不能提供可变迭代器(如琐碎迭代器要求中定义的那样),因为可变迭代器的值类型必须是可赋值的,而成对不可赋值。但是,成对的关联容器可以提供不完全恒定的迭代器:迭代器使得表达式(*i).second=d有效。 |
![]() |
6
1
弗斯特
其次,下面的代码是好的
调用函数时,参数在调用该函数之前进行计算。 因此,在调用erase之前对iter++进行计算时,迭代器的++运算符将返回当前项,并在调用之后指向下一个项。 |
![]() |
7
1
我不知道有没有
|
![]() |
8
1
现在,
见: http://en.cppreference.com/w/cpp/experimental/map/erase_if |
![]() |
9
1
基于 Iron Savior's answer 对于那些希望沿着std函数taking迭代器提供更多范围的函数。
好奇是否有某种方法可以丢失containerive项并从迭代器中得到它。 |
![]() |
10
0
Steve Folly's answer 我觉得效率越高。 这里是另一个 简单但效率较低的解决方案 :
解决方案使用
|
![]() |
11
0
如果要删除键大于2的所有元素,最好的方法是
但只适用于范围,不适用于任何谓词。 |
![]() |
12
0
我喜欢这样
|
|
Julia · 矢量中相加为总和S的值的数量 2 年前 |
![]() |
C_Rod · 在模板方法中确定STL容器中项目的数据类型 3 年前 |
![]() |
quantumwell · 将空向量放入std::map() 7 年前 |
![]() |
OutOfBound · 对未初始化内存使用算法的优点 7 年前 |
![]() |
DarthRubik · 在使用列表删除之后,迭代器如何不无效 7 年前 |