• STL之erase用法


    vector::erase():从指定容器删除指定位置的元素或某段范围内的元素

    vector::erase()方法有两种重载形式

    如下:

    1、iterator erase(iterator _Where);

    v1.erase( v1.begin( ) );//删除v1中的第一个元素

    vec.erase(vec.begin()+2);删除第3个元素

    2、iterator erase(iterator _First,iterator _Last);

        //删除v1.begin() + 1v1.begin() + 2两个元素

    v1.erase(v1.begin() + 1, v1.begin() + 3);

    vec.erase(vec.begin()+i,vec.begin()+j);删除区间[i,j-1];区间从0开始

    插入元素:vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;

    如果是删除指定位置的元素时:
    返回值是一个迭代器,指向删除元素下一个元素;如果是删除某范围内的元素时:返回值也表示一个迭代器,指向最后一个删除元素的下一个元素;


    #include <iostream>
    #include <vector>
    #include <string>
    #include <algorithm>
    using namespace std;
    int main(){
        string str = "abcdefg";
        int num[10] = {1,2,3,4,5,6,7,8,9,0};
        vector<int> res;
        for (auto c: num)
            res.push_back(c);
    
    
        //删除第一个元素
        res.erase(res.begin());
    
        //删除最后一个元素
        res.pop_back();
    
        //删除指定位置元素
        int index = 2;
        res.erase(res.begin()+index);
    
        //删除区间的元素
        res.erase(res.begin()+index, res.begin()+4);
    
        //删除指定值:可以先找到元素位置进行删除,也可以直接删除
        vector<int>::iterator iter = res.begin();
    
        for ( ; iter != res.end();){
            if (*iter == 6){
                res.erase(iter);//删除一个元素时,返回的是一个迭代器,指向删除元素的下一个位置,已经iter++了,所以不需要进行iter++
                cout<<"找到元素, 成功删除";
            }
            else{
                cout<<"未找到指定元素,删除失败";
                iter++;
            }
        }
        iter = res.begin();
        for ( ; iter != res.end(); iter++)
            cout<<*iter<<endl;
    }
  • 相关阅读:
    责任链模式
    状态模式
    命令模式
    策略模式
    迭代器模式
    适配器模式
    装饰模式
    合成模式
    brew php 提示
    sarafi浏览器iframe跨域cookie无效的处理方案(笨方法,看官莫笑)
  • 原文地址:https://www.cnblogs.com/Kobe10/p/6397282.html
Copyright © 2020-2023  润新知