std :: unordered_set :: erase()有3個重載:在一個引用中,傳遞一個「無效」值,即一個不' t存在於該集合中,只是讓erase()返回0.但其他兩個重載又如何?無效迭代器的結果傳遞給std :: unordered_set :: erase()
C++ 11標準是否說在這種情況下erase()應該做什麼,或者它依賴於編譯器?它應該返回end()還是未定義的行爲?
我在說明書cppreference.com,cplusplus.com中找不到答案。在IBM網站上,他們說如果操作後沒有元素,它會返回end(),但如果操作本身由於無效的迭代器而失敗會發生什麼?
一般來說,在這種情況下,STL容器的erase()方法是否具有未定義的行爲? (所以我需要檢查我的迭代器之前,我通過任何擦除(),或使用unordered_set :: erase()重載它需要一個value_type引用,如果失敗,它將簡單地返回0)
如果你正在處理一個無效的迭代器,你已經在其他地方發生了錯誤。標準庫不關心。爲什麼要這樣?它只允許你訪問有效的迭代器 - 你以後做的任何事情都是你的問題。 – Xeo 2013-03-06 13:24:12