2013-02-12 82 views
0

調用迭代方法(例如STL容器擦除(覆蓋2個迭代器))是否安全?在我的情況下,std::vector::erase(),兩個參數是vec.end()?我做了一個實驗,看起來這個調用沒有任何作用,但我想確保我可以在代碼中安全地使用它,否則我必須測試我的迭代器,並且如果它們相同,則避免erase()std :: vector ::使用相同參數擦除

+3

是的,它很安全。 – 2013-02-12 02:05:40

+0

@SethCarnegie它是標準嗎?我的意思是,我完全可以依賴於編譯器無關的嗎? cplusplus.com和cppreference.com不解釋這種特殊情況... – cfa45ca55111016ee9269f0a52e771 2013-02-12 02:08:57

+2

是的,它到處都是安全的。這不是特例; 'erase'刪除'[a,b]'範圍內的所有元素,如果'a == b',則不刪除任何元素。 – 2013-02-12 02:10:06

回答

7

C++標準(n3337),23.2.3,序列容器,表100('序列容器的需求) - a.erase(q1,q2)行:

效果:刪除範圍[q1,q2)的元素。

這意味着a.erase(q,q)是安全的,因爲它什麼都不做。

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

+0

如果可能,你可以添加一個鏈接嗎? – StarPinkER 2013-02-12 02:42:25

+0

@JermaineXu完成。 – us2012 2013-02-12 02:45:37

2

它是安全的;它是一個有效的無操作,因爲end() - > end()是一個空的範圍。