STL——容器(Set & multiset)的删除 erase

set.clear();             //清除所有元素

set.erase(pos);     //删除pos迭代器所指的元素,返回下一个元素的迭代器。

set.erase(beg,end);    //删除区间[beg,end)的所有元素,返回下一个元素的迭代器。

set.erase(elem);     //删除容器中值为elem的元素。

代码例子:

#include <iostream>
#include <set>

using namespace std;

int main()
{
    set<int> setInt;

    cout << "第一次遍历setInt,没有任何元素:";
    for (set<int>::iterator it = setInt.begin(); it != setInt.end(); it++)
    {
        cout << *it << " ";
    }

    //在容器中插入元素
    cout << endl << "插入20个元素" << endl << endl;
    for (int i = 0; i < 20; i++)
    {
        setInt.insert(i);
    }
    cout << "插入20个元素后的第二次遍历setInt" << endl;
    for (set<int>::iterator it = setInt.begin();it!=setInt.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
    
    //删除迭代器所指的元素,返回下一个元素的迭代器。
    cout << "删除迭代器所指的元素 5 " << endl;
    for (set<int>::iterator it = setInt.begin(); it != setInt.end();)
    {
        if (*it == 5)
        {
            it = setInt.erase(it);        //由于会返回下一个元素的迭代器,相当于进行了it++的操作
        }
        else
        {
            it++;
        }
    }
    cout << endl << "删除迭代器所指的元素 5 后遍历 setInt:" << endl;
    for (set<int>::iterator it = setInt.begin();  it != setInt.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;

    //删除区间(beg,end)的所有元素,返回下一个元素的迭代器。
    cout << endl << "删除元素 15 之后的所有元素";
    for (set<int>::iterator it = setInt.begin(); it != setInt.end();)
    {
        if (*it == 15)
        {
            //如果找到15,删除15之后所有的元素,由于会返回下一个元素的迭代器,相当于进行了it++的操作
            it = setInt.erase(it, setInt.end());
        }
        else
        {
            it++;
        }
    }
    cout << endl << "删除元素 15 之后的所有元素后遍历 setInt:";
    for (set<int>::iterator it = setInt.begin(); it != setInt.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;

    // 删除容器中值为elem的元素
    cout << endl << "删除元素 10";
    setInt.erase(10);
    cout << endl << "删除元素 10 之后遍历 setInt:";
    for (set<int>::iterator it = setInt.begin(); it != setInt.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;

    //清除所有元素
    cout << endl << "删除所有元素";
    setInt.clear();    
    cout << endl << "删除所有元素之后遍历 setInt:";
    for (set<int>::iterator it = setInt.begin(); it != setInt.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;

    return 0;
}

打印结果:

STL——容器(Set & multiset)的删除 erase

==================================================================================================================================

相关推荐