std::vector 刪除多個元素


 

 

  最近在做麻將時將牌值存到std::vector里面,需要同時刪除好幾張牌時一時竟然沒寫出來。

  vector在erase一個元素的時候會自動返回下一個元素的迭代器,刪除掉一個元素之后,如果沒有break掉,那么下一輪刪除的時候迭代器需要重新賦值,最好是break,這樣for可以少一點

  先試試不刪掉之后不break,下一輪給迭代器重新賦值:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> values;
    vector<int> del_values;
    for (int i = 0; i < 10; i++)
    {
        values.push_back(i);
    }

    del_values.push_back(4);
    del_values.push_back(5);

    vector<int>::iterator it = values.begin();
    for (int v : del_values)
    {
        for (; it != values.end();)
        {
            if (v == *it)
            {
                it = values.erase(it);
            }
            else
            {
                it++;
            }
        }

        it = values.begin();
    }

    for (int v : values)
    {
        cout << v << endl;
    }

    system("pause");
    return 0;
}

輸出正常。

 

試試刪除一個之后break出去繼續下一輪:

for (int v : del_values)
    {
        for (; it != values.end();)
        {
            if (v == *it)
            {
                it = values.erase(it);
                break;
            }
            else
            {
                it++;
            }
        }
    }

差別就一點點,想想還是后面這種好一些。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM