最近在做麻将时将牌值存到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++;
            }
        }
    }

差别就一点点,想想还是后面这种好一些。

相关文章:

  • 2022-12-23
  • 2022-03-10
  • 2021-06-27
  • 2022-02-25
  • 2021-10-07
  • 2022-01-09
  • 2021-07-23
  • 2021-07-17
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-03-04
  • 2022-01-06
  • 2021-05-23
  • 2022-03-04
  • 2021-10-02
相关资源
相似解决方案