C++集合类模板

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;
}

结果图:
set

  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值