STL容器(set、map、vector、list)用法总结

本文详细介绍了C++标准模板库(STL)中的四种主要容器:set、map、vector和list的使用方法,包括定义、操作、遍历等关键知识点,以及它们之间的区别和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Set

头文件    #include <set>

set不重复存储元素,同一个元素的第二次插入无效。

set按升序排序顺序存储元素

定义set对象: set<ElemType> s;

 

遍历方法:

#include <iostream>
#include <set>
using namespace std;
int main()
{
	set<int> s;
	s.insert(1);
	s.insert(2);
	set<int>::iterator iter;
	for(iter=s.begin();iter!=s.end();iter++){
		cout<<*iter<<endl;
	}
}


 

Map

头文件  #include <map>

定义方式:

map<KeyType, ElemType> m;

默认根据KeyType进行升序排序存储

添加或获取map元素的最简便方法:直接使用m[key]操作

m[new_key]=new_data;//插入新键值对

m[key]=new_data;//修改键值对

ElemType value=m[key];//获取与key对应的value值

 

注意key要存在于map中,假如key不存在,运行语句 int value=m[key]; 会导致创建新键值对,且返回默认值0给value

//一个key存在:m.find(key)!=m.end()
//得到这个key对应的值:
if(m.find(key)!=m.end())
{
    int val=m.find(key)->second;
}

遍历map:

#include <iostream>
#include <map>
using namespace std;
int main()
{
	map<string,int> m;
	m["ZZH"]=18000;
	m["ZHF"]=16000;
	m["ZLG"]=17000;
	map<string,int>::iterator iter;
	for(iter=m.begin();iter!=m.end();iter++)
	{
		cout<<iter->first<<" "	<<iter->second<<endl;//iter->first是key,iter->second是值 
	}
}

 

 

Vector

头文件  #include <vector>

定义方式

a) vector<int>v1;//vector元素为 int 型  

b) vector<string>v2;// vector元素为string型  

c) vector<node>v3;//入队元素为结构体型,结构体可以自行定义

vector<int>::iterator it;//定义一个迭代器

常用操作

v1.erase(pos)        //删除pos位置的数据 比如V.erase(V.begin()+pos);

v1.erase(beg,end)// 删除[beg,end)区间的数据 比如V.erase(V.begin()+start,V.begin()+end);
v1.insert(pos,data) //在pos处插入数据 比如V.erase(V.begin()+pos,data);
v1.push_back()   //在数组的最后添加一个数据

v1.pop_back()    //去掉数组的最后一个数据
v1.front()  //返回第一个元素(栈顶元素)

v1.clear()        // 移除容器中所有数据

v1.empty()         //判断容器是否为空

v1.size()         //回容器中实际数据的个数

 

 

List

list与vector区别:

list是双向链表,vector是连续性空间存储的数组

当插入、删除节点比较多时用list,随机访问比较到时用vector

 

头文件  #include<list>

定义方式:

list<int> a;

常用操作:

push_back(value)   从list的末端插入一个元素

push_front(value)    从list的头部插入一个元素

pop_back() 删掉尾部第一个元素

pop_front() 删掉头部第一个元素

empty()  判断list是否为空

clear()  清空list中的所有元素

front()获得list容器中的头部元素

back()获得list容器的最后一个元素
swap(a, b);交换两个链表。
reverse(b.begin(),b.end()); 实现list的逆置

l.insert(iter,value)  在指定位置插入一个元素,不能用l.begin()+pos,只能用迭代器指定位置

l.erase(l.begin()+pos);  //将l的第一个元素删除

l.erase(l.begin(),l.begin()+pos);  //将l的从begin()到begin()+pos之间的元素删除。

remove(value)  从list中删除值为value的所有元素

 

list的遍历:

#include <iostream>
#include <list>
using namespace std;
int main()
{
	list<int> l;
	l.push_back(1);
	l.push_back(2);
	l.push_front(3);
	list<int>::iterator iter;
	for(iter=l.begin();iter!=l.end();iter++){
		cout<<*iter<<endl;
	}
}

 

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值