C++STL中的set容器详解

C++中的set容器详解

● set容器中的元素都是由小到大排好序的。
● set容器中没有重复的元素。

set的基本操作如下:
在这里插入图片描述
关于迭代器的理解,可以把迭代器理解为数组的下标。begin()返回指向容器中第一个元素的迭代器。end ()返回的不是指向最后一个元素的迭代器,而是指向最后一个元素后面的位置的迭代器。以数组a[5]为例,begin()就相当于下标0,end()就相当于下标5。

代码:

#include<iostream>
#include<set>
using namespace std;
int main()
{
    set<int>s;
    set<int>::iterator iter;
    set<int>::reverse_iterator riter;
    for(int i=5;i>=1;i--)
        s.insert(i);//系统根据元素的值自动进行排序,由小到大排序。边插边排序。
    s.insert(2);//,set容器元素唯一,2已经存在,所以插入失败。

    cout<<"s中的元素依次为;";
    for(iter=s.begin();iter!=s.end();iter++)
        cout<<*iter<<' ';
    cout<<endl;

    cout<<"s中2出现的次数:"<<s.count(2)<<endl;//输出2出现的次数1次,由于set容器值唯一,所以返回值要么是1,要么是0,即要么出现,要么没出现。
    cout<<"s的size为:"<<s.size()<<endl;//5个元素,输出5。
    cout<<"s的maxsize为:"<<s.max_size()<<endl;//set容器可能包含的元素最大值。

    cout<<"反向输出s中的元素;";
    for(riter=s.rbegin();riter!=s.rend();riter++)
        cout<<*riter<<' ';
    cout<<endl;

     pair<set<int>::const_iterator,set<int>::const_iterator> pr;
    pr=s.equal_range(4);
    cout<<"第一个大于或等于关键值4的值:"<<*pr.first<<endl;
    cout<<"第一个大于关键值4的值:"<<*pr.second<<endl;
    //equal_range()返回一对定位器,分别表示第一个大于或等于给定关键值的元素和第一个大于给定关键值的元素。

    pr=s.equal_range(20);
    cout<<"*s.end()的值为:"<<*s.end()<<endl;
    cout<<"第一个大于或等于关键值20的值:"<<*pr.first<<endl;
    cout<<"第一个大于关键值20的值:"<<*pr.second<<endl;
    //equal_range()这个返回值是一个pair类型,如果这一对定位器那个返回失败,就会等于end()的值。

    s.clear();
    if(s.empty())
        cout<<"set容器为空。"<<endl;
    else
        cout<<"set容器不为空。"<<endl;
    return 0;
}

运行结果:
在这里插入图片描述
代码:

#include<iostream>
#include<set>
using namespace std;
int main()
{
    int b[5]={10,9,8,7,6};
    set<int>s1;
    set<int>::iterator iter1;
    s1.insert(b,b+5);
    s1.insert(11);//inset()函数一般就用这两个方式。
    cout<<"s1中的元素依次为;";
    for(iter1=s1.begin();iter1!=s1.end();iter1++)
        cout<<*iter1<<' ';
    cout<<endl;

    iter1=s1.find(8);
        cout<<*iter1<<endl;//找到8就输出8。找不到就会等于s1.end()的值。
    cout<<"*s1.end()的值为:"<<*s1.end()<<endl;
    iter1=s1.find(20);
        cout<<*iter1<<endl;//找不到,就会等于s1.end()的值。

    cout<<"第一个大于等于8的值为:"<<*s1.lower_bound(8)<<endl;
    cout<<"最后一个大于等于8的值为:"<<*s1.upper_bound(8)<<endl;

    s1.erase(8);
    for(iter1=s1.begin();iter1!=s1.end();iter1++)
        cout<<*iter1<<' ';
    cout<<endl;

    s1.erase(s1.begin());//删除迭代器s1.begin()指的值6
    for(iter1=s1.begin();iter1!=s1.end();iter1++)
        cout<<*iter1<<' ';
    cout<<endl;

    set<int>::iterator first;
    set<int>::iterator second;
    first=s1.begin();
    second=s1.begin();
    second++;
    second++;
    s1.erase(first,second);
    for(iter1=s1.begin();iter1!=s1.end();iter1++)
        cout<<*iter1<<' ';
    cout<<endl;

    return 0;
}

运行结果:
在这里插入图片描述
代码:

#include<iostream>
#include<set>
using namespace std;
int main()
{
    int a[7]={1,2,3,4,5,6,7};
    set<int>s;
    set<int>::iterator iter;
    s.insert(a,a+7);
    cout<<"s中的元素依次为;";
    for(iter=s.begin();iter!=s.end();iter++)
        cout<<*iter<<' ';
    cout<<endl;

    int b[5]={10,9,8,7,6};
    set<int>s1;
    set<int>::iterator iter1;
    s1.insert(b,b+5);
    cout<<"s1中的元素依次为;";
    for(iter1=s1.begin();iter1!=s1.end();iter1++)
        cout<<*iter1<<' ';
    cout<<endl;

    s.swap(s1);
    cout<<"交换后:"<<endl;
    cout<<"s中的元素依次为;";
    for(iter=s.begin();iter!=s.end();iter++)
        cout<<*iter<<' ';
    cout<<endl;
    cout<<"s1中的元素依次为;";
    for(iter1=s1.begin();iter1!=s1.end();iter1++)
        cout<<*iter1<<' ';
    cout<<endl;

    return 0;
}


运行结果:
在这里插入图片描述
永远相信美好🎈

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信小海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值