C++集合类模板
set类模板又称为集合类模板,一个集合对象像链表一样顺序地存储一组值。在一个集合中,集合元素既充当存储的数据,又充当数据的关键码。
创建set链表类模板的方法:
#include<set> //调用set头文件
...
...
set<type>s; //定义一个set
//set表示声明一个集合类模板,<type>表示集合的类型,s表示集合名。
set对象主要成员函数说明:
只是一些常用的,其它还有很多。
函数 | 说明 |
---|---|
begin | 返回指向集合第一个元素的迭代器 |
end | 返回指向集合最后一个元素的迭代器 |
size | 返回集合的大小 |
clear | 删除集合中所有元素 |
count(x) | 返回集合中值为x的元素个数 |
find(x) | 返回一个指向x的迭代器,若x不存在,则返回end |
erase(start,end) | 删除迭代器从start到end范围内的向量 |
erase(i) | 删除迭代器第i个元素 |
insert(i,x) | 把值x插入到由迭代器指明的第i个位置 |
insert(i,start,end) | 把迭代器从start到end范围的元素插入到指明的第i个位置 |
insert(i,n,x) | 把x的n个副本插入到由迭代器指明的第i个位置 |
swap(set) | 交换两个集合的内容 |
值得注意的是,集合无法通过索引进行赋值和输入输出。
迭代器
对set集合的各个元素的访问,通常使用迭代器。
迭代器定义方法:
set<int>::iterator it=s.begin();
定义了一个迭代器it指向set集合s的开始指针。
set集合与迭代器的入门应用
插入操作
set<int>s;
s.insert(1);s.insert(3);s.insert(5);
s.insert(7);s.insert(9);s.insert(11);
set<int>::iterator it;
for(it=s.begin();it!=s.end();it++)
cout<<*it<<" ";
给大家做一下解释,
先是定义一个int类型的set集合s,重复插入操作6次。
定义一个迭代器it,it=s.begin()初始化指向s的头指针。
然后通过it++遍历输出s的所有元素。
输出结果为:1 3 5 7 9 11
需要注意的是,for循环终止条件为it!=s.end(),当it=s.end()时,it指向的是s的最后元素的下一个空元素,而非最后元素。
删除操作
承接插入操作继续运行
s.erase(--it);
for(it=s.begin();it!=s.end();it++)
cout<<*it<<" ";
通过s.erase(- -it); 删除s最后一个元素,
输出结果为:1 3 5 7 9
查找操作
重新回顾一下查找操作find:
find(x) 返回一个指向x的迭代器,若x不存在,则返回end。
承接以上的插入删除操作:
it=s.find(5);
if(it!=s.end())
cout<<"found"<<endl;
else
cout<<"not found"<<endl;
it=s.find(13);
if(it!=s.end())
cout<<"found"<<endl;
else
cout<<"not found"<<endl;
输出结果为:
found
not found
三合一源代码:
#include<iostream>
#include<set>
using namespace std;
int main(){
set<int>s;
s.insert(1);s.insert(3);s.insert(5);
s.insert(7);s.insert(9);s.insert(11);
set<int>::iterator it;
for(it=s.begin();it!=s.end();it++)
cout<<*it<<" ";
cout<<endl;
s.erase(--it);
for(it=s.begin();it!=s.end();it++)
cout<<*it<<" ";
cout<<endl;
it=s.find(5);
if(it!=s.end())
cout<<"found"<<endl;
else
cout<<"not found"<<endl;
it=s.find(13);
if(it!=s.end())
cout<<"found"<<endl;
else
cout<<"not found"<<endl;
}
结果图: