STL 容器——个人学习总结

目录

一、简介

二、几种容器的共通之处

1.使用时都要包含头文件

2.初始化类似

三、各种容器用法

1.string——字符串

2.vector——可变数组

3.queue——队列

4.deque——双向队列

5.stack——栈

6.set/multiset——集合

7.pair——对组

8.map——映射

参考资料


一、简介

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)

以上为学习大佬的博客后个人的小小总结。

参考资料:

1.【C++】蓝桥杯必备 算法竞赛常用STL万字总结_蓝桥杯算法竞赛_Cpt1024的博客-CSDN博客

2.  C++ STL详解超全总结(快速入门STL)_行码棋的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云霄星乖乖的果冻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值