std :: vector :: erase使用相等的参数

时间:2013-02-12 02:04:51

标签: c++ stl

调用迭代方法是否安全,例如STL容器擦除(覆盖2个迭代器),例如在我的情况下std::vector::erase(),两个参数都是vec.end()?我做了一个实验,看起来调用什么也没做,但是我想确保我可以在代码中安全地使用它,否则我必须测试我的迭代器并避免erase()如果它们相等。 / p>

2 个答案:

答案 0 :(得分:7)

C ++ Standard(n3337),23.2.3,Sequence container,Table 100('sequence container requirements) - row a.erase(q1,q2)

  

效果:删除[q1,q2)范围内的元素。

这意味着a.erase(q,q)是安全的,因为它什么都不做。

Loki Astari对this SO question的回答有一份C ++标准草案清单。不幸的是,官方副本不是免费提供的,所以我使用的是n3337,它似乎是最接近C ++ 11的。

答案 1 :(得分:2)

安全;这是一个有效的无操作,因为end() - > end()是一个空的范围。