調用迭代方法(例如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. 從std :: vector擦除範圍?
- 2. 如何在不同的std :: vector中刪除相同的指針?
- 3. C++ std :: vector作爲std :: function的參數
- 4. std :: vector擦除 - 是否自動取消分配?
- 5. 從std :: vector連續擦除的安全方法?
- 6. 爲什麼begin()在std :: vector中需要擦除?
- 7. 擦除std :: vector的元素是否保留了排序?
- 8. 如何使用std :: reverse_iterator擦除*和CONTINUE *?
- 9. STD向量的擦除和的push_back
- 10. std :: vector對於清除或刪除POD有不同的作用
- 11. std :: vector的第二個參數
- 12. std :: remove不會從std :: vector中刪除
- 13. 幫助我理解的std ::擦除
- 14. 使用std :: lower_bound與std :: vector :: const_iterator
- 15. 使用strcpy與std :: vector
- 16. std :: vector bad_alloc不使用push_back
- 17. 在std :: vector :: begin()之前遞減std :: vector :: iterator
- 18. iterate std :: vector <std :: vector <char>>?
- 19. C++ std :: vector std :: sort無限循環
- 20. 方法有相同類型的擦除
- 21. 容器模板參數std :: map或std :: vector
- 22. std :: vector <T>
- 23. 繼承std :: vector
- 24. 指向std :: vector
- 25. 繼承std :: vector
- 26. std :: vector與std :: list與std :: slist的相對性能?
- 27. C++擦除remove慣用法
- 28. emplace_back on std :: vector
- 29. 相同的擦除,但不是相同的類型。
- 30. 我應該使用std :: move函數返回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