首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ vector 刪除元素完全指南

     編輯:C++ 入門

核心問題

vector::erase 會使原迭代器失效,但返回指向下一個元素的新迭代器。必須接收返回值,否則後續遍歷會崩潰。

正確遍歷刪除模式

for (auto it = v.begin(); it != v.end(); ) {
    if (*it == 1) it = v.erase(it); // 關鍵:接收返回值
    else ++it;
}

常見變體

  • 刪除指定位置:v.erase(v.begin() + 3); (隨機訪問迭代器支持算術)
  • Erase-Remove 慣用語(C++11 起推薦):
    v.erase(remove_if(v.begin(), v.end(), [](int x){ return x==1; }), v.end());
  • 刪除單個元素:直接用 erase(iterator),迭代器可由 find 或索引獲得。

迭代器失效規則速記

操作失效範圍
erase(pos)pos 及其後所有迭代器
insert(pos, ...)若觸發重新分配,所有迭代器;否則 pos 及其後
push_back若觸發重新分配,所有迭代器
resize/reserve若容量增大,所有迭代器

總結

牢記 erase 返回新迭代器,配合 for(; it!=end; ) 循環結構,即可安全刪除。現代 C++ 應優先考慮 remove_if + erase 組合,代碼更簡潔高效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved