簡體   English   中英

向量迭代器不可遞增,這與迭代器和擦除的操作有關

[英]vector iterator not incrementable, which is related to the operation of iterator and erase

我正在網上搜索很長時間。 但是沒用。 請幫助或嘗試提供一些解決此問題的想法。

class Solution{
public:
    int removeElement(vector<int> &nums, int val)
    {

        for (auto &it = nums.begin(); it != nums.end(); ++it)
        {
            if (*it == val)
            {
                it = nums.erase(it);
            }
        }
        return nums.size();
    }
};
int main(void)
{
    Solution s; 
    vector<int> vi = { 3, 2, 2, 3 };
    cout << "size = " << s.removeElement(vi, 3) << endl;
    for (auto &i : vi)
    {
        cout << i << " ";
    }
    cout << endl;

    return 0;
}

這是我代碼的類主體和主要功能主體。 但是當我運行它時,編譯器彈出一個窗口:

在此處輸入圖片說明

刪除最后一個元素后, it元素it變為nums.end()並不允許對其進行遞增。

刪除后,您不應該增加it 這也將解決擦除后跳過一個元素的問題。

此外,應刪除& in auto &it = nums.begin()因為使用它會使其無效地初始化非const引用。

嘗試這個:

#include <iostream>
#include <vector>

using std::vector;
using std::cout;
using std::endl;

class Solution{
public:
    int removeElement(vector<int> &nums, int val)
    {

        for (auto it = nums.begin(); it != nums.end();)
        {
            if (*it == val)
            {
                it = nums.erase(it);
            } else
            {
                ++it;
            }
        }
        return nums.size();
    }
};
int main(void)
{
    Solution s; 
    vector<int> vi = { 3, 2, 3, 3, 2, 3 }; // added testcase of consecutive 3
    cout << "size = " << s.removeElement(vi, 3) << endl;
    for (auto &i : vi)
    {
        cout << i << " ";
    }
    cout << endl;

    return 0;
}

暫無
暫無

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

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