STL小记——vector、deque、stack、queue、list、
deque和vector的区别:
(1)插入和删除的位置不同:
deque——双端队列,头和尾都可以插入和删除
vector——只能在尾部进行插入和删除
(2)头插的效率不同:
vector头插/删效率低,移动的数据量大;deque直接在头部进行插入/删除;
(3)随机访问数组元素的速度:
vector和deque都支持随机访问,但访问效率vector>deque
1.vector
1.1 vector的构造函数:
- vector<T> v; //模板实现的默认构造函数
- vector(v.begin(),v.end()); //将区间【v.begin(),v.end())中的元素拷贝给本身
- vector(n,element); //将n个element拷贝给本身
- vector(const vector &vec); //拷贝构造函数
1.2vector的赋值操作:
- vector& operator=(const vector &vec); //重载=
- assign(v.begin(),v.end()); //区间【v.begin(),v.end())
- assign(n,element);
1.3vector的容量和大小:
- empty(); //判断容器是否为空
- capacity(); //容器容积
- size(); //返回容器中当前元素个数
- resize(n); //容器元素个数为n
- resize(n,element); //容器元素个数为n,不足n用element填充
- reserve(n); //将容器扩容至n,若当前容器容积>n,将容器扩容至n——【vector扩容:VS1.5倍扩容 GCC2倍扩容】
1.4vector的插入和删除:
插入:
- push_back(ele); //尾插
- insert(const_iterator pos,ele); //指定位置插入ele
- insert(const_iterator pos,n,ele); //指定位置插入n个ele
删除:
- pop_back(): //尾删
- erase(const_iterator pos); //删除pos位置的元素
- erase(const_iterator start,const_iterator end); //删除迭代器从start到end之间的元素
- clear(); //清空vector
1.5vector数据存取:
- at(int index);
- operator[];
- front();
- back();
1.6vector容器互换——收缩内存:
- swap(vec);
2.deque
2.1 deque的构造函数:
- deque<T> deq; //模板实现的默认构造函数
- deque(deq.begin(),deq.end()); //将区间【deq.begin(),deq.end())中的元素拷贝给本身
- deque(n,element); //将n个element拷贝给本身
- deque(const deque &deq); //拷贝构造函数
2.2 deque的赋值操作:
- deque& operator=(const deque&vec); //重载=
- assign(deq.begin(),deq.end()); //区间【deq.begin(),deq.end())
- assign(n,element);
2.3 deque的大小操作——deque无容积概念
- empty(); //判断容器是否为空
- size(); //返回容器中当前元素个数
- resize(n); //容器元素个数为n
- resize(n,element); //容器元素个数为n,不足n用element填充
2.4 deque的插入和删除:
插入:
- push_front(ele); //头插
- push_back(ele); //尾插
- insert(const_iterator pos,ele); //指定位置插入ele
- insert(const_iterator pos,n,ele); //指定位置插入n个ele
- insert(const_iterator pos,begin,end); //指定位置插入区间【begin,end)的元素
删除:
- pop_front(): //头删
- pop_back(): //尾删
- erase(const_iterator pos); //删除pos位置的元素
- erase(const_iterator start,const_iterator end); //删除迭代器从start到end之间的元素
- clear(); //清空vector
2.5 deque数据存取:
- at(int index);
- operator[];
- front();
- back();
2.6 deque排序:
- sort(iterator begin,iterator end); //对区间[begin,end]中的元素进行排序
3.stack——先进后出
只能在栈顶进行插入和删除
- 栈的构造函数:
stack<T> stk;
stack(const stack &stk); //拷贝构造函数
- 赋值操作:
stack& operator=(const stack &stk); //重载=
- 数据存取:
push(ele); //向栈顶添加元素
pop(); //从栈顶移除一个元素
top(); //获取栈顶元素
- 大小操作:
empty();
size();
4.queue——先进先出
只能在队尾插入数据,队头删除数据
- 队列的构造函数:
queue<T> que;
queue(const stack &que); //拷贝构造函数
- 赋值操作:
queue& operator=(const queue &que); //重载=
- 数据存取:
push(ele); //向队尾添加元素
pop(); //从队头移除一个元素
back(); //获取最后一个元素
front(); //获取第一个元素
- 大小操作:
empty();
size();
5.list——双向循环链表
list的迭代器只支持前移和后移,不支持随机访问【list的迭代器可以it++,不能it=it+1】
list的优点;
动态存储,不会造成内存浪费和溢出;
插入和删除比数组方便
list的缺点;
空间和时间的消耗大
5.1 list构造函数:
- list<T> lst;
- list(begin,end);
- list(n,ele);
- list(const list &lst);
5.2 list赋值和交换;
- assign(begin,end);
- assign(n,ele);
- list& operator=(const list &lst);
- swap(lst);
5.3 list大小操作:
- empty();
- size();
- resize(n);
- resize(n,ele);
5.4 list插入和删除:
- push_back(ele);
- push_front(ele);
- pop_back();
- pop_front();
- insert(pos,ele);
- insert(pos,n,ele);
- insert(pos,begin,end); //区间【begin,end)
- erase(begin,end);
- clear();
- remove(ele); //删除list中所有与ele匹配的元素
5.5 数据存取——list不支持随机存取
- front(); //返回第一个元素
- back(); //返回最后一个元素
5.6 list反转和排序:
- reverse(); //反转链表
- sort(); //不是加#include<algorithm>的头文件,而是list的内置成员函数(从小到大排序)
bool compare(int l1, int l2)
{
return l1>l2;
}
sort(compare); //从大到小排序
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)