STL·笔记
vector
基本操作
创建vector对象,vector<int> vec;
尾部插入数字:vec.push_back(a);
使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的。
使用迭代器访问元素.
vector<int>::iterator it; for(it=vec.begin();it!=vec.end();it++) cout<<*it<<endl;
插入元素: vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;
删除元素: vec.erase(vec.begin()+2);删除第3个元素
vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始
向量大小:vec.size();
清空:vec.clear();
queue
STL 中的 queue
容器提供了一众成员函数以供调用。其中较为常用的有:
queue<……> a;
元素访问
q.front()
返回队首元素
q.back()
返回队尾元素
修改
q.push()
在队尾插入元素
q.pop()
弹出队首元素
容量
q.empty()
队列是否为空
q.size()
返回队列中元素的数量
deque
1. 定义一个int类型的空双端队列 v0
deque<int> v0;
2. 定义一个int类型的双端队列 v1,并设置初始大小为10; 线性复杂度
deque<int> v1(10);
3. 定义一个int类型的双端队列 v2,并初始化为10个1; 线性复杂度
deque<int> v2(10, 1);
4. 复制已有的双端队列 v1; 线性复杂度
deque<int> v3(v1);
5. 创建一个v2的拷贝deque v4,其内容是v4[0]至v4[2]; 线性复杂度
deque<int> v4(v2.begin(), v2.begin() + 3);
6. 移动v2到新创建的deque v5,不发生拷贝; 常数复杂度; 需要 C++11
deque<int> v5(std::move(v2));
元素访问
q.front()
返回队首元素
q.back()
返回队尾元素
修改
q.push_back()
在队尾插入元素
q.pop_back()
弹出队尾元素
q.push_front()
在队首插入元素
q.pop_front()
弹出队首元素
q.insert()
在指定位置前插入元素(传入迭代器和元素)
q.erase()
删除指定位置的元素(传入迭代器)
容量
q.empty()
队列是否为空
q.size()
返回队列中元素的数量
priority_queue
priority_queue<int> q1;
// q1大根堆
priority_queue<int, std::vector<int> > q2;
priority_queue<int, std::deque<int>, std::greater<int> > q3;
// q3 为小根堆
for (int i = 1; i <= 5; i++) q1.push(i);
// q1 中元素 : [1, 2, 3, 4, 5]
std::cout << q1.top() << std::endl;
// 输出结果 : 5
q1.pop();
// 堆中元素 : [1, 2, 3, 4]
std::cout << q1.size() << std::endl;
// 输出结果 :4
for (int i = 1; i <= 5; i++) q3.push(i);
// q3 中元素 : [1, 2, 3, 4, 5]
std::cout << q3.top() << std::endl;
// 输出结果 : 1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报