当前位置: 首页 > news >正文

STL常用功能

pair

定义:pair<变量类型1,变量类型2>a(1-值,2-值)。
a = make_pair(1-值,2-值);
访问:1-a.first  2-a.second
比较:a < b -> ( a.first < b.first || a.first == b.first && a.second < b.second; )
可以嵌套:pair<int,pair<int,int>>b(1, pair<int,int>(2,3));

array

定义:array<int, 5(数组大小)>a; (等于int a[5])
auto [p, q, r] = b; // p = b[0], q = b[1], r = b[2]

stack(栈) 先进后出

定义:stack<变量类型>s;
入栈:s.push(值);
访问栈顶元素:s.top();
出栈(删除栈顶元素):s.pop();
栈的长度:s.size();
栈为空的时候返回true:s.empty();

queue(队列) 先进先出
用法:bfs

定义:queue<变量类型>q;
入队:q.push(值);
出队:q.pop();
访问第一个元素:q.front();
访问最后一个元素:q.back();
队列为空的时候返回true:q.empty();

priority_queue(优先队列)
用法:大根堆top为最大值,小根堆top为最小值。
默认大根堆。

定义:priority_queue<变量类型>v;
v.push(值);
v.top();

小根堆:1.给每个值取反(x->-x)如图所示:
(大根堆)

点击查看代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;priority_queue<int> v;int main() {v.push(3);v.push(1);v.push(2);while (!v.empty()) {int x = v.top();printf("%d\n", x);v.pop();}
}
-> (小根堆)
点击查看代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;priority_queue<int> v;int main() {v.push(-3);v.push(-1);v.push(-2);while (!v.empty()) {int x = v.top();printf("%d\n", -x);v.pop();}
}

deque(双端队列)
用法:可以在两端进行插入删除操作

定义:deque<int>v;
头部插入:v.push_front(1);
头部删除:v.pop_front();
尾部插入:v.push_back(2);
尾部删除:v.pop_back();
可以按照下标访问,例:v[];

vector

初始化:
vector<int>v;
vector<int>v(3,100);(大小为1,每个值为100)
vector<int>v{1,2,3};(v[0] = 1,v[1] = 2,v[2] = 3;)
从最后放入元素:
v.push_back(1);
遍历:
for(auto x: v){printf("%d ",x);
}
x为临时变量,改变x不会改变v的值。
使用&x=引用v中对应变量,v的值会随着x改变。
预处理大小:v.risize(100);
大小:v.size();(当v是空的时,v转为无符号类型,v.size()大小为2^32,为了避免算大小应该用(int)v.size();)
清空:v.clear();
迭代器:指向元素的东西。auto it = v.begin();//指向第一个元素。
指向下一个元素:
it ++;
*it += 1;
在第一个位置插入2:
v.insert(v.begin() + 1, 2);
删除第二个位置的元素:
v.erase(v.begin + 2)。
排序:
#include<algorithm>
sort(v.begin(),v.end());
返回大于等于x的第一个位置:
auto it1 = lower_bound(v.begin(), v.end(), x);
返回大于x的第一个位置:
auto it2 = upper_bound(v.begin(), v.end(), x);
x在v中的元素个数 = it2 - it1。
vector之间比较按照字典序。

set
image

初始化:
set<T>s;
v中所有元素存到s中set<T>s(v.begin(),v.end());
删除元素x:
s.erase(x);
遍历:
for (auto it = s.begin(); it != s.end(); it++) {printf("%d\n", *it);
}
查询x是否存在:
s.count(x);(返回0 or 1)
s.find(x);(返回迭代器,找不到返回s.end())
返回大于等于x的第一个元素迭代器:
auto it1 = lower_bound(x);
it的前一个元素:
prev(it);
--it;
插入:s.insert(x);

map
image

初始化:
map<T1,T2>v;
T1:下标类型
T2:值的类型
访问:
第一个:x.first      第二个:x.second 
定义:
v["abc"] = "def";
遍历:
for (auto x : s) {cout << x.first << " : " << x.second << endl;
}
当访问一个不存在的下标x,会新建一个使v[x] = 0;所以在判断一个元素是否等于0,则
if(v.count(x)&&v[x] == 0){return true;
}
删除:
v.erase();

multiset

和set相似,不过不会去重
初始化:
multiset<int>s;
当s.erase(x)时,会将s中所有的x都删除
当删除一个时,可用迭代器:
s.erade(s.find(x));

string
image

字符串转int:
string s = "123";
int a = stoi(s);
同理转long long:
long long a = stoll(s);
int转字符串:
int a = 123;
string s = to_string(a);
字符串拼接:
string s1 = "123";
s1 += "456";
则现在s1 = "123456";
把x放在s最后:s.push_back(x);
把从位置l到位置r的字符串替换为字符串z:
s.replace(l,r,z);
把字符串类型转为char的字符串类型:
s.c_str();
从pos开始找t,找不到返回string::npos:
s.find(t,pos);
从pos开始,截取长度为len的字串:
string t = s.substr(pos,len);
从pos开始截取到末尾:
string t = s.substr(pos);
http://www.jsqmd.com/news/50788/

相关文章:

  • 2025/11/25-Xs new location transparency feature unleashes questions about origins of MAGA accounts
  • 实用指南:【底层机制】深入浅出地、系统地剖析 Appium 的原理
  • Go 语言未来会取代 Java 吗?
  • 玄机钓鱼邮件分析_2025/11/25
  • 容错量子电路大幅降低资源开销
  • 详细介绍:【C基本功】类型转换的奇幻漂流
  • 点灯笔记:CW32L010
  • Rust 零拷贝技术:从所有权到专业的系统调用的性能优化之道
  • 服务器代码执行三板斧
  • 过山车
  • 2025年下半年奖牌/水晶奖杯/奖杯定制/定制厂家口碑推荐榜
  • day07 spark sql - 详解
  • 深入解析:系统架构设计师备考第57天——云原生架构相关技术
  • 2025年舒适操控的轮胎推荐:TOP5专业测评深度揭秘
  • 2025年宝马5系更换轮胎推荐:TOP5专业榜单权威推荐
  • 低代码 vs 无代码:核心差异、适用场景与选型决策
  • 【ArcMap】将一个线图层的属性字段连接到另一个线图层
  • 低代码平台选型指南:企业避坑指南与核心评估维度
  • detectron2 框架安装
  • IMX6D的LVDS调试
  • 实用指南:Hadoop High Availability 简介
  • 蓝牙协议:ant/ant+
  • 题解:CF1746D Paths on the Tree
  • 完整教程:CodeBuddy+混元生图+lighthouse助我实现漫画插图在线生成
  • 人工智能之数据分析 numpy:第十四章 知识总结
  • 信息的建筑学:MyBatis Log Panda 如何重构开发者的认知地图
  • 皮革外观缺陷检测设备:助力生产质量把控的技术应用
  • 2025年最新!高效AI论文写作工具TOP 3 权威评测
  • 解决Windows窗口在屏幕外的问题
  • 2025水设备厂家推荐榜:灌装/大桶/桶装/纯净/瓶装/水设备综合品牌参考,引领智能绿色升级