簡體   English   中英

std :: vector> v.erase(&v [1]); 未找到

[英]std::vector > v.erase(&v[1]); not found

要從向量中刪除元素,我們可以使用

v.erase(v.begin() + 1); // remove 2nd 

我還在本網站(SO)的某些帖子中找到了如下句子(例如this )。

v.erase(&v[1]); 

但是,當我嘗試使用第二句話時,編譯器會說“錯誤:沒有匹配函數調用std :: vector)...”

http://ideone.com/UZJaEK

第二句僅在某些有限的環境中可用嗎?

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM