首頁 > 後端開發 > C++ > 在 C 11 中迭代時如何安全地從向量中刪除元素?

在 C 11 中迭代時如何安全地從向量中刪除元素?

Mary-Kate Olsen
發布: 2024-11-28 20:56:11
原創
372 人瀏覽過

How to Safely Remove Elements from a Vector While Iterating in C  11?

在C 11 基於範圍的循環期間從向量中刪除元素

C 11 中基於範圍的for 循環提供了一種便捷的迭代方式容器的元素,特別是當您需要對每個元素執行操作時。但是,在處理向量時,有時可能需要在迭代向量時從向量中刪除元素。

問題

考慮以下程式碼:

std::vector<IInventory*> inv;
inv.push_back(new Foo());
inv.push_back(new Bar());

for (IInventory* index : inv)
{
    // Do some stuff
    // ...
}
登入後複製

在循環內,您意識到需要從向量 inv 中刪除特定元素。但是,您遇到兩個問題:

  1. 無法刪除元素:基於範圍的 for 迴圈不提供在迭代向量時修改向量的方法。
  2. 循環有效性:從向量中刪除元素可能會使向量無效

基於🎜>解

基於範圍的for 循環適用於僅需要存取容器的每個元素一次的情況。如果需要在迭代期間修改或刪除元素,則應使用傳統的 for 迴圈或其基於迭代器的變體之一。
for (auto i = inv.begin(); i != inv.end(); /*++i*/) {
    // Do stuff
    if (should_remove) {
        i = inv.erase(i);
    } else {
        ++i;
    }
}
登入後複製

以下是如何使用具有迭代器增量管理的傳統for 循環修改程式碼:

透過明確管理迭代器增量,您可以維護循環的有效性,並確保您可以刪除和修改元素而不會遇到任何錯誤。

以上是在 C 11 中迭代時如何安全地從向量中刪除元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板