关于 C++ STL 的用法(部分,自行备忘)
目录
0xff 前言
众所周知,OIer 选手使用的 C++ 可以说是 C with STL。
在 NOIP/CSP 的时候,我们就可以通过 STL 来减小代码的长度,比如说 堆、哈希 等。当然也有被卡常数的危险(但是一般都不会)。
由于有些时候会忘记一些 STL 的用法,所以就做了个汇总(指我学过的)。
文中 T
在文中表示一个变量类型
0x00 队列(queue)
定义:
#include<queue> std::queue<T> q;
函数:
void q.push(T x) //在队尾插入 O(1) void q.pop()//在队尾删除,队列为空时会 RE O(1) bool q.empty()//返回队列是否为空 O(1) unsigned int q.size()//返回队列元素个数 O(1) T q.front()//返回队首元素 O(1) T q.back()//返回队尾元素 O(1)
0x01 双端队列(deque)
定义:
#include<queue> std::deque<T> q;
函数:
void q.push_front(T x)//在队首插入 O(1) void q.pop_back()//在队首删除,队列为空时会 RE O(1) void q.push_back(T x)//在队尾插入 O(1) void q.pop_back()//在队尾删除,队列为空时会 RE O(1) bool q.empty()//返回队列是否为空 O(1) unsigned int q.size()//返回队列元素个数 O(1) T q.front()//返回队首元素 O(1) T q.back()//返回队尾元素 O(1)
0x02 优先级队列(priority_queue)
定义:
#include<queue> std::priority_queue<T> q;//小根堆,需要重载 operator> std::priority_queue<T,vector<T>,greater<T> > q;//大根堆,需要重载 operator< std::priority_queue<T1,T2,T3>//依次为存储变量类型,存储容器,比较函数
函数:
T q.top()//返回堆顶元素 O(1) void q.push(T x)//加入元素 O(log(q.size())) void q.pop()//删除堆顶的元素 O(log(q.size())) unsigned int q.size()//返回队列元素个数 O(1) bool q.empty()//返回队列是否为空 O(1)
0x03 动态数组(vector)
定义:
#include<vector> std::vector<T> q;
函数:
//咕咕咕
运算符:
operator[] (const int x) //返回这个容器的第 x 项(下标从 0 开始)
0x04 集合(set&multiset)
定义:
#include<set> std::set<T> s;//需要重载 operator< 自动去重 multiset::set<T>//需要重载 operator< 不去重,用法相同
函数:
set<T>::iterator//迭代器 set<T>::iterator operator++//到下一个迭代器 O(1) set<T>::iterator operator--//到上一个迭代器 O(1) iterator s.begin()//返回第一个元素的迭代器,如果容器为空就和 end() 的返回值相同 O(1) iterator s.end()//返回最后一个元素的迭代器,注意这个迭代器是占位符(不存在) O(1) iterator s.lower_bound(T x) //返回第一个大于等于 x 的元素的迭代器,如果不存在返回 end() O(log2(q.size()) iterator s.upper_bound(T x) //返回第一个大于 x 的元素的迭代器,如果不存在返回 end() O(log2(q.size()) for(set<T>::iterator i=s.begin();i!=s.end();i++) std::cout<<*x<<' '; //便利整个容器并输出 应用 bool s.empty()//容器是否为空 O(1) void s.size()//容器内元素数量 O(1) void s.clear()//清空容器 O(s.size()) void s.insert(T x)//插入 O(log2(s.size())) void s.erase(T x)//删除元素(如果不存在就不删除) O(log2(s.size())) void s.erase(<set>::iterator x)//删除迭代器对应的元素 O(log2(s.size()))
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析