簡體   English   中英

刪除 C++ 中的元素后的 Vector.end() 意外行為

[英]Vector.end() unexpected behavior after deleting an element in C++

我在刪除向量中的重復值時遇到問題。 我知道當向量值被刪除時,向量會被重新分配以維護沒有任何“黑洞”的數據。 問題是,當我在循環中使用 remove() 時,當代碼運行回它的條件語句時,我收到斷言失敗消息。

我的問題是:如果我在迭代的條件下使用 nums.end(),它是否獲得迭代器的靜態值,或者對於每次迭代,它返回一個新的迭代器,該迭代器指向新的re-分配向量? 如果有或沒有,增量似乎有什么問題?

while ( itfast != nums.end()) {
        if (*itslow == *itfast) {
            nums.erase(itfast);
        }
        else {
            itslow++;
            itfast++;
        }
    }

std::vector.erase 使當前迭代器無效,但返回一個迭代器,指向下一個經過擦除的有效迭代器。

itfast = nums.erase(itfast);

正如丹尼爾指出的那樣,這將使您擁有的任何其他迭代器無效,因此您也必須處理 itslow 情況。

當處理更復雜的擦除時,它可以更簡單並且更不容易出錯,而是處理索引,盡管如果您刪除一個元素並且 itslow >= 刪除的元素,也存在關於 itslow 的陷阱。 沒有看到您的確切問題是什么,我無法准確說出使用哪個。

有關擦除的更多詳細信息,請參閱 cppreference。 還有其他幾個與此非常相似的問題。

https://en.cppreference.com/w/cpp/container/vector/erase std::vector 迭代器失效

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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