[英]std::vector > v.erase(&v[1]); not found
要從向量中刪除元素,我們可以使用
v.erase(v.begin() + 1); // remove 2nd
我還在本網站(SO)的某些帖子中找到了如下句子(例如this )。
v.erase(&v[1]);
但是,當我嘗試使用第二句話時,編譯器會說“錯誤:沒有匹配函數調用std :: vector)...”
第二句僅在某些有限的環境中可用嗎?
erase()
需要一個迭代器,而不是一個指針。
對於std::vector
,碰巧是一個指針是實現其迭代器的有效方式,因此第二種形式可能會在使用指針作為迭代器的實現中進行編譯。 當然,這樣的使用是絕對不便攜的。
現代實現通常將單獨的類型用於迭代器,在這種情況下,第二個版本將無法編譯。 使用單獨的類型可以在編譯時(例如,捕獲std::string
的迭代器和std::vector<char>
的意外混合)更好地進行錯誤檢查( (用於調試模式)。
從cplusplus.com來看 , vector::erase
沒有這種過載。
也許,您正在尋找std::remove
。
引用:
將范圍[first,last)轉換為一個范圍,並刪除所有等於val的元素,然后將迭代器返回到該范圍的新末端。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.