一、引言
本人第一次写文章,只是想把这篇文章当做笔记记录,写文章也都是为了做笔记,也没有深入的学过c++,一直学的都是C语言,学习c++只是因为打比赛更方便,只学了一些皮毛,没有深入,目前还在学习阶段,如有错误,欢迎指正!!!
二、c++的特性
- 头文件不同,c的头文件在c++中使用需要将原来的.h删除并添加c在开头
- gun(g++,gcc)编译器特有 万能头文件<bits/stdc++.h>
- 具有命名空间,通常我们无视这个特性,但需要知道c++是具有命名空间的,有的时候取名字会和命名空间的一些名字冲突。using namespace std;
- 可以重载操作符号(使用STL必备条件,部分STL库需要先重载<符号,原因是因为STL很多容器是基于xx树实现的,通常基于xx树实现排序。例如map,set,特殊的,sort排序算法本身就需要重载小于号,才知道谁应该排在前面。)
三、关于set
关于set,必须说明的是set关联式容器。set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动从小到大进行排序。应该注意的是set中数元素的值不能直接被改变。
四、set中最常用的方法
1、样例示范
- 引用insert(num),size(),empty(),being(),end()方法;
#include<bits/stdc++.h>
using namespace std;
int main(){
int a,i,j,n=4;
set<int> s;
for(i=0;i<n;i++){
scanf("%d",&a);
s.insert(a);
}
printf("s的大小为:%d\n",s.size());
printf("s中的第一个元素是:%d\n",*s.begin());
printf("s中的最后一个元素是:%d\n",*s.end());
s.clear();
if(s.empty()){
printf("s已清空!\n");
}
printf("清空后s的大小为:%d\n",s.size());
}
运行结果:
2.erase(iterator) ,删除定位器iterator指向的值
erase(first,second),删除定位器first和second之间的值
erase(key_value),删除键值key_value的值
本段还示范了set的遍历
#include<bits/stdc++.h>
using namespace std;
int main()
{
set<int> s;
set<int>::iterator iter;
set<int>::iterator first;
set<int>::iterator second;
for(int i = 1 ; i <= 10 ; ++i)
{
s.insert(i);
}
printf("第一种删除:\n");
//第一种删除
s.erase(s.begin());
printf("删除后 set 中元素是 :");
for(iter = s.begin() ; iter != s.end() ; ++iter)
printf("%d ",*iter);
printf("\n");
printf("第二种删除:\n");
//第二种删除
first = s.begin();
second = s.begin();
second++;
s.erase(first,second);
printf("删除后 set 中元素是 :");
for(iter = s.begin() ; iter != s.end() ; ++iter)
printf("%d ",*iter);
printf("\n");
printf("第二种删除:\n");
//第三种删除
s.erase(7);
printf("删除后 set 中元素是 :");
for(iter = s.begin() ; iter != s.end() ; ++iter)
printf("%d ",*iter);
printf("\n");
return 0;
}
运行结果:
3.inset(first,second);将定位器first到second之间的元素插入到set中,返回值是void.
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[] = {1,2,3,4,5,6};
set<int> s;
set<int>::iterator iter;
s.insert(a,a+3);
for(iter = s.begin() ; iter != s.end() ; ++iter)
printf("%d ",*iter);
printf("\n");
return 0;
}
运行结果:
4、find() ,返回给定值值得定位器,如果没找到则返回end()。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[] = {1,2,3,4,5};
set<int> s(a,a+3);
set<int>::iterator iter;
if((iter = s.find(2)) != s.end())
printf("%d\n",*iter);
if((iter = s.find(9)) == s.end())
printf("%d",*iter);
return 0;
}
运行结果:
5.lower_bound(key_value) ,返回第一个大于等于key_value的定位器
upper_bound(key_value),返回最后一个大于等于key_value的定位器
#include<bits/stdc++.h>
using namespace std;
int main()
{
set<int> s;
int a[]={1,2,3,4,5};
s.insert(a,a+5);
printf("%d\n",*s.lower_bound(2));
printf("%d\n",*s.lower_bound(3));
printf("%d",*s.upper_bound(3));
return 0;
}
运行结果:
本文参考:参考链接