• 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++;
                }
            }
        }

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

  • 相关阅读:
    nginx负载均衡
    docker 使用之管理工具shipyard(五)
    docker使用之私有仓库构建(四)
    docker使用之dockerfile手动构建镜像(三)
    docker 使用之网络和存储(二)
    docker部署和使用(一)
    Java微信公众号开发
    Java实现验证码的制作
    SSH框架-Struts2基础-Action
    Java算法
  • 原文地址:https://www.cnblogs.com/leisc/p/6562299.html
Copyright © 2020-2023  润新知