C++ STL库中set的常见操作

头文件

#include <iostream>
#include <set>
using namespace std;

定义

set <int> s;

注意:

  1. 有序性。 set容器中的元素默认升序排序;
  2. 重复性。 set容器中没有重复的元素。

常见用法

1.迭代器

s.begin();     //返回指向容器头部的迭代器
s.end();       //返回指向容器尾部的迭代器
s.rbegin();    //等价于s.end()
s.rend();      //等价于s.begin()

2.插入操作

插入格式:
s.insert(i); //直接向容器中添加i元素
s.insert(first,second);//插入区间(first,second)的中的元素
该区间为左闭右开区间

#include <iostream>
#include <set>
using namespace std;

int main()
{
   set <int> s1;
   set <int> s2;
   for(int i=0;i<=5;i++)
      s1.insert(i);
   for(int j=6;j<=10;j++)
      s2.insert(j);
   set<int>::iterator first=s2.begin();
   set<int>::iterator second=s2.begin();
   second++;
   second++;
   
   s1.insert(11);
   for(set<int>::iterator iter=s1.begin();iter!=s1.end();iter++)
      cout<<(*iter)<<' ';
      cout<<endl;
   //运算结果:0 1 2 3 4 5 11 
   s1.insert(first,second);
   for(set<int>::iterator iter=s1.begin();iter!=s1.end();iter++)
      cout<<(*iter)<<' ';
   //运算结果:0 1 2 3 4 5 6 7 11 
   return 0;
}   

以上代码的运算结果如下:
在这里插入图片描述
3.删除操作

格式:
s.erase(i);//删除元素i
s.erase(pos);//删除位置为pos的元素
s.erase(s.begin(),s.end());//删除所有元素。等价于s.clear()。

#include <iostream>
#include <set>
using namespace std;

int main()
{
   int a[] = {1,2,3,4,5};
   set <int> s (a,a+5);//数组a中的元素全部赋给s

   s.erase(3);//第一种删除方式,删除元素3
   for(set <int> ::iterator it = s.begin();it != s.end();it++)
   {  
      cout<<(*it)<<' ';
   }
   cout<<endl;
   //运算结果:1 2 4 5 
   s.erase(s.begin());//第二种删除方式,删除第一个元素
   for(set <int> ::iterator it = s.begin();it != s.end();it++)
   {
      cout<<(*it)<<' ';
   }
   cout<<endl;
   //运算结果:2 4 5 
   s.erase(s.begin(),s.end());//第三种删除方式,删除所有元素
   if(s.empty())
      cout<<"set为空!!!";
   //运算结果:set为空!!!
   return 0;
}

以上代码运行结果如下:
在这里插入图片描述
4.其他常见函数

s.size();     //返回当前容器中的元素个数
s.max_size(); //返回set容器的最大容量
s.count();    //判断某元素的出现次数。因为在set中没有重复出现的元素,所以该函数只判断该元素是否存在
s.swap();     //交换两个set容器中的所有元素
#include <iostream>
#include <set>
using namespace std;

int main()
{ 
   set <int> s1;
   set <int> s2;
   
   for(int i = 0;i<=5;i++)
   { 
      s1.insert(i);
   }
   for(int j = 4;j<=8;j++)
   {
      s2.insert(j);
   }

   cout<<s1.size()<<endl;//运算结果:6
   cout<<s1.max_size()<<endl;
  
   s1.swap(s2);
   set <int> ::iterator it=s1.begin();
   while(it != s1.end())
   {
      cout<<(*it)<<' ';
      it++;
   }
   //运算结果:4 5 6 7 8 
   return 0;
}

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

发布了15 篇原创文章 · 获赞 17 · 访问量 425

猜你喜欢

转载自blog.csdn.net/qq_46020858/article/details/104174642