首頁 >後端開發 >C++ >我們可以從 C 11 基於範圍的 For 迴圈內的向量中刪除元素嗎?

我們可以從 C 11 基於範圍的 For 迴圈內的向量中刪除元素嗎?

Barbara Streisand
Barbara Streisand原創
2024-12-06 01:32:09860瀏覽

Can We Remove Elements from a Vector Inside a C  11 Range-Based For Loop?

在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
    // I need to remove this object from 'inv'...
}

我們可以刪除基於範圍的循環中的元素嗎?

不可以,您無法在基於範圍的 for 迴圈內從向量中刪除元素。這是因為循環透過建立向量迭代器的副本進行操作,如果刪除或新增元素,該副本就會失效。

因此,考慮在迭代期間修改容器的替代方法至關重要。

建議的解決方案

建議的方法是使用傳統的 for 循環或其變體之一。這允許您直接操作向量並根據需要刪除元素。例如:

auto i = std::begin(inv);

while (i != std::end(inv)) {
    // Do some stuff
    if (blah)
        i = inv.erase(i);
    else
        ++i;
}

以上是我們可以從 C 11 基於範圍的 For 迴圈內的向量中刪除元素嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn