目录
一、简介
STL总共有以下容器:
(1)string——字符串
(2)vector——可变数组
(3)queue——队列
(4)deque——双向队列
(5)stack——栈(先进后出)
(6)set——集合(不允许有重复的元素)
(7)map——映射
二、几种容器的共通之处
1.使用时都要包含头文件
如:(以一两个为例,其他的类似)
#include<vector>
#include<string>
2.初始化类似
三、各种容器用法
1.string——字符串
(1)初始化
string str1 //空字符串
string str2("123456789") //生成"123456789"的复制品
string str3("12345",0,3) //从0开始,长度为3,结果为"123"
string str4("123456",5) //长度为5,结果为12345
string str5(5,'2') //结果为22222
string str6(str2,2) //结果为3456789,截取str2第三个以后
拼接:
s3=s1+s2
(2)数据存取与修改
取出单个数据:
str1[index]
str1.at(index)
求字串:
s.substr(pos,len) //返回从pos开始,长度为len的子串
增加:
.push_back()
.insert(pos,element)
.append(str)
删除:
erase(iterator p) //删除p所指字符
erase(iterator first,iterator last) //删除[first,last)之间所有字符
erase(pos,len) //删除从pos开始,长度为len的字符
s.pop_back() //删除最后一个元素
替换:
s.replace(pos,n,str) //把当前字符串从索引pos开始的n个字符替换为str
s.replace(pos,n,n1,c) //把当前字符串从索引pos开始的n个字符替换为n1个字符c
s.replace(it1,it2,str) //把当前字符串[it1,it2)区间替换为str it1 ,it2为迭代器
(3)容量大小
.empty() //是否为空
.size()
.length()
.capacity() //容量
.clear() //清空
2.vector——可变数组
(1)初始化
vector<int> v
vector<int> v{1,2,3,4,5} //有五个元素,分别为1,2,3,4,5
vector<int> v(10) //长度为10
vector<int> v(10,3) //长度为10,且每个数赋值3
vector<int> v(a.begin(),a.begin()+3) //将a的0,1,2号元素赋值给v
vector<int> v(a) //拷贝构造。将a复制到v
(2)数据存取与修改
.front() //返回第一个数据
.back() //返回最后一个数据
.begin() //返回第一个数据的迭代器
.end() //返回最后一个数据后一个位置的迭代器
.at(int index) //返回第index个数据
[index] //返回第index个数据
.push_back() //存入数据
.pop_back() //取出数据
.erase(first,last) //删除[first,last)的所有元素
.clear() //清空
(3)容量大小
.empty() //是否为空
.capacity() //容量
.size() //元素个数
.resize(int num) //长度改为num
.resize(int num,elem) //长度改为num,新位置以elem填充
(4)互换
v1.swap(v2)
(5)预留空间
v.reverse(10000)
3.queue——队列
(1)初始化
queue<int> q;
(2)数据存取与修改
取出:
.front()
.back()
增加:
.push()
删除:
.pop()
清空:
.clear()
(3)容量大小
.size()
.empty()
4.deque——双向队列
(1)初始化
deque<int> deq1;
(2)数据存取与修改
取出:
.at(index)
[index]
增加:
.push_back(elem)
.push_front(elem)
.insert(pos.elem)
.insert(pos,n,elem) //无返回值
.insert(pos,beg,end) //无返回值
删除:
.pop_back()
.pop_front()
.erase(beg,end)
.erase(pos)
清空:
.clear()
(3)容量大小
.empty()
.size()
5.stack——栈
(1)初始化
stack<int> stk1;
stack<int> stk2(stk1)
(2)数据存取与修改
取出:
.top() //返回栈顶元素
增加:
.push()
删除:
.pop()
(3)容量大小
.empty()
.size()
6.set/multiset——集合
set不允许元素重复
multiset允许元素重复
(1)初始化
set<int> st1;
(2)数据存取与修改
查找:
.find()
增加:
.insert(elem)
删除:
erase(it)
erase(beg,end)
erase(elem)
清空:
.clear()
统计
.count(key) //统计key元素个数
交换
.swap(st2)
(3)容量大小
.empty()
.size()
(4)返回大于某个数的迭代器
lower_bound(x); //返回大于等于x的最小的数的迭代器 核心操作
upper_bound(x); //返回大于x的最小的数的迭代器 不存在返回end()
7.pair——对组
(1)头文件
#include<utility>
(2)初始化与赋值
法1:pair<string,int> p("hello",1)
法2:p=make_pair("hello",1)
赋值:
p=pair<srting,int>("hello",1)
(3)数据访问
.first
.second
8.map——映射
map中所有元素都是pair,所有元素会根据元素的键值自动排序
(1)初始化
map<string,int>
map<string,int> m={"A",10};
(2)数据存取与修改
查找:
.find(key)
增加:
.insert(pair<int,int>(1,10))
.insert(make_pair(2,20))
.insert(map<int,int>::value_type(3,30))
map<int,int> m;
m[4]=40;
删除:
.erase(pos)
.erase(beg,end)
.erase(key)
清空:
.clear()
(3)统计
.count(key)
以上为学习大佬的博客后个人的小小总结。