• C++ STL set删除数据:erase()和clear()方法

    如果想删除 set 容器存储的元素,可以选择用 erase() 或者 clear() 成员方法。

    set 类模板中,erase() 方法有 3 种语法格式,分别如下:

    //删除 set 容器中值为 val 的元素
    size_type erase (const value_type& val);
    //删除 position 迭代器指向的元素
    iterator  erase (const_iterator position);
    //删除 [first,last) 区间内的所有元素
    iterator  erase (const_iterator first, const_iterator last);

    其中,第 1 种格式的 erase() 方法,其返回值为一个整数,表示成功删除的元素个数;后 2 种格式的 erase() 方法,返回值都是迭代器,其指向的是 set 容器中删除元素之后的第一个元素。

    注意,如果要删除的元素就是 set 容器最后一个元素,则 erase() 方法返回的迭代器就指向新 set 容器中最后一个元素之后的位置(等价于 end() 方法返回的迭代器)。

    下面程序演示了以上 3 种 erase() 方法的用法:

    #include <iostream>
    #include <set>
    #include <string>
    using namespace std;
    int main()
    {
        //创建并初始化 set 容器
        std::set<int>myset{1,2,3,4,5};
        cout << "myset size = " << myset.size() << endl;
       
        //1) 调用第一种格式的 erase() 方法
        int num = myset.erase(2); //删除元素 2,myset={1,3,4,5}
        cout << "1、myset size = " << myset.size() << endl;
        cout << "num = " << num << endl;
    
        //2) 调用第二种格式的 erase() 方法
        set<int>::iterator iter = myset.erase(myset.begin()); //删除元素 1,myset={3,4,5}
        cout << "2、myset size = " << myset.size() << endl;
        cout << "iter->" << *iter << endl;
    
        //3) 调用第三种格式的 erase() 方法
        set<int>::iterator iter2 = myset.erase(myset.begin(), --myset.end());//删除元素 3,4,myset={5}
        cout << "3、myset size = " << myset.size() << endl;
        cout << "iter2->" << *iter2 << endl;
        return 0;
    }

    程序执行结果为:

    myset size = 5
    1、myset size = 4
    num = 1
    2、myset size = 3
    iter->3
    3、myset size = 1
    iter2->5

    如果需要删除 set 容器中存储的所有元素,可以使用 clear() 成员方法。该方法的语法格式如下:

    void clear();

    显然,该方法不需要传入任何参数,也没有任何返回值。

    举个例子:

    #include <iostream>
    #include <set>
    #include <string>
    using namespace std;
    int main()
    {
        //创建并初始化 set 容器
        std::set<int>myset{1,2,3,4,5};
        cout << "1、myset size = " << myset.size() << endl;
        //清空 myset 容器
        myset.clear();
        cout << "2、myset size = " << myset.size() << endl;
        return 0;
    }

    程序执行结果为:

    1、myset size = 5
    2、myset size = 0

更多...

加载中...