调用迭代方法是否安全,例如 STL 容器擦除(覆盖采用 2 个迭代器),例如在我的情况下std::vector::erase()
,两个参数都是vec.end()
?我做了一个实验,看起来这个调用什么也没做,但我想确保我可以在代码中安全地使用它,否则我必须测试我的迭代器并避免erase()
它们是否相等。
问问题
197 次
2 回答
7
C++ 标准 (n3337),23.2.3,序列容器,表 100('序列容器要求)- 行a.erase(q1,q2)
:
效果:擦除范围内的元素
[q1,q2)
。
这意味着这a.erase(q,q)
是安全的,因为它什么都不做。
Loki Astari 对这个 SO 问题的回答有一份 C++ 标准草案的列表。不幸的是,官方副本不是免费提供的,所以我使用的是 n3337,它似乎是最接近 C++11 的。
于 2013-02-12T02:14:11.970 回答
2
它是安全的;这是一个有效的空操作,因为 end() -> end() 是一个空范围。
于 2013-02-12T02:15:55.447 回答