調用迭代方法(例如STL容器擦除(覆蓋2個迭代器))是否安全?在我的情況下,std::vector::erase()
,兩個參數是vec.end()
?我做了一個實驗,看起來這個調用沒有任何作用,但我想確保我可以在代碼中安全地使用它,否則我必須測試我的迭代器,並且如果它們相同,則避免erase()
。std :: vector ::使用相同參數擦除
0
A
回答
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()是一個空的範圍。
相關問題
- 1. 使用lambda函數擦除std :: vector中相同值的副本
- 2. 使用std :: vector ::使用const_iterators擦除
- 3. 從std :: vector擦除範圍?
- 4. C++ std :: set ::使用std :: remove_if擦除::
- 5. 使用std :: unary_function清除std :: vector指針
- 6. std :: vector vs std :: insert
- 7. 如何在不同的std :: vector中刪除相同的指針?
- 8. C++ std :: vector作爲std :: function的參數
- 9. 如何使用擦除功能通過索引擦除std :: vector <>中的多個元素?
- 10. 擦除std :: vector的元素是否保留了排序?
- 11. 如何安全地擦除std :: vector中的元素
- 12. std :: vector擦除 - 是否自動取消分配?
- 13. 從std :: vector連續擦除的安全方法?
- 14. 爲什麼begin()在std :: vector中需要擦除?
- 15. 沒有匹配函數調用的std :: vector的<int> ::擦除(INT&)
- 16. 如何使用std :: reverse_iterator擦除*和CONTINUE *?
- 17. 使用std :: vector的
- 18. std :: vector作爲模板函數參數
- 19. vector ::擦除導致奇怪的行爲
- 20. STD向量的擦除和的push_back
- 21. std :: list ::擦除不工作
- 22. std :: vector對於清除或刪除POD有不同的作用
- 23. std :: vector <std :: vector <T>> vs std :: vector <T*>
- 24. std :: vector的第二個參數
- 25. 不能刪除std :: vector&std :: array?
- 26. std :: remove不會從std :: vector中刪除
- 27. 幫助我理解的std ::擦除
- 28. 擦除類型參數
- 29. std :: vector到GLvoid *?
- 30. 使用strcpy與std :: vector
是的,它很安全。 – 2013-02-12 02:05:40
@SethCarnegie它是標準嗎?我的意思是,我完全可以依賴於編譯器無關的嗎? cplusplus.com和cppreference.com不解釋這種特殊情況... – cfa45ca55111016ee9269f0a52e771 2013-02-12 02:08:57
是的,它到處都是安全的。這不是特例; 'erase'刪除'[a,b]'範圍內的所有元素,如果'a == b',則不刪除任何元素。 – 2013-02-12 02:10:06