C++ STL
2022/3/2 22:48:51
本文主要是介绍C++ STL,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- vector:变长数组
- set:有序不重复
- string:字符串
- map:键值对,key有序不重复
- queue:队列
- priority_queue:优先队列
- stack:栈
- algorithm常用函数
vector:变长数组
定义
头文件:#include<vector> vector<int> name; vector<node> name; vector<int> vi[10]; //一维长度固定的二维数组 vector<vector<int> > vi; //二维长度都不固定的二维数组
访问
- 下标访问
- 迭代器访问
vector<int>::iterator iter; it=vec.begin(); it=vec.end(); vector<int>::reverse_iterator r_iter r_iter=vec.rbegin(); r_iter=vec.rend();
常用函数
函数 | 描述 |
---|---|
push_back(x) | 添加元素x |
pop_back() | 移除尾元素 |
size() | 长度 |
clear() | 清空 |
insert(iterator,x) | 在迭代器位置添加元素 x |
erase(iterator) | 删除迭代器处的元素 |
erase(firstIterator,lastIterator) | 删除 [ )区间的元素 |
set:有序不重复
定义 :头文件 #include<set>
类似vector
访问:迭代器访问
常用函数
函数 | 描述 |
---|---|
insert(x) | 添加元素x |
find(value) | 返回值为value的元素的迭代器 |
erase(iterator) | 删除迭代器处的元素 |
erase(value) | 删除值为value的元素 |
erase(firstIterator,lastIterator) | 删除[ )区间的元素 |
size() | 长度 |
clear() | 清空 |
string:字符串
定义
头文件`#include<string>` string str="abcd";
如果要读入或者输出整个字符串,只能用 cin
和 cout
(头文件#include<iostream>
)
使用printf输出字符串 printf("%s",str.c_str() )
,转换成字符数组输出
访问
- 下标
- 迭代器
常用函数
函数 | 描述 |
---|---|
+ | 拼接两个string |
=、!=、<、> | 比较字符串 |
size() | 长度 |
insert(pos,string) | 在指定位置插入字符串 |
erase(iterator)、erase(first_iterator,last_iterator) | 删除单个元素或区间元素 |
clear() | 清空 |
substr(pos,len) | 截取字符串,若len大于剩余长度,则截取到str末尾 |
find(str) | 在当前字符串中查找str,返回第一次出现的下标位置,若查找失败返回string::npos |
replace(pos,len,str2) | 从pos位置起,长度为len的字串替换为str2 |
map:键值对,key有序不重复
map可以是任何基本类型(包括STL)映射到任何基本类型(包括STL)
定义:头文件#include<map>
,声明map<type1,type2> mp;
访问
- 下标:mp[“string”]、mp[‘a’] …
- 迭代器
map<type1,type2>::iterator it;
通过it->first
,it->second
访问键和值
常用函数
函数 | 描述 |
---|---|
find(key) | 返回键为key的键值对的迭代器 |
erase(iterator)、erase(key)、erase(first_iterator,last_iterator) | 删除单个元素或区间元素 |
size() | 长度 |
clear() | 清空 |
unorder_map<type1,type2> mp //声明 #include<unorder_map> ,不排序map
queue:队列
定义:头文件#include<queue>
,声明queue<type> qu;
函数 | 描述 |
---|---|
front() | 获得队首元素 |
back() | 获得队尾元素 |
push(x) | x入队 |
pop() | 出队 |
empty() | 检测是否为空 |
size() | 长度 |
priority_queue:优先队列
定义:头文件#include<queue>
,声明priority_queue<type> qu;
常用函数
函数 | 描述 |
---|---|
push(x) | x入队 |
pop() | 出队 |
top() | 获得队首元素,使用前判断是否为空 |
empty() | 判断为空 |
size() | 长度 |
优先级设置
- 基本数据类型
默认越大排前面:priority_queue<int> qu ; priority_queue<int, vector<int> ,less<int> > 小的排前面:priority_queue< int, vector<int> ,greater<int> >
- 结构体:在结构体内重载<
struct fruit{ string name; int price; friend bool operator < (fruit f1 , fruit f2){ return f1.price<f2.price; // 按price排序,< <不变,价格大的排前面
stack:栈
定义:头文件 #include<stack>
, 声明 stack<type> st;
常用方法
函数 | 描述 |
---|---|
push(x) | x入队 |
pop() | 出队 |
top() | 获得栈顶元素 |
empty() | 判断是否为空 |
size() | 长度 |
algorithm常用函数
函数 | 描述 |
---|---|
max(x,y)、min(x,y)、abs(x) | 最大值,最小值(参数只能两个,可以为浮点数);abs(x),必须为整数;fabs(x) ,x可为浮点数 |
swap(x,y) | 交换x和y的值 |
reverse(t1,t2) | 将指针或者迭代器在 [t1,t2) 内的元素反转 |
next_permutation(t1,t2) | 返回值bool,改变指针或迭代器[t1,t2)内元素的位置,全排列最后一个返回false |
fill(t1,t2,val) | 将数组或者容器迭代器[t1,t2)范围内的值填充为val |
lower_bound() 和 upper_bound()
使用条件:有序数组或容器
lower_bound(first,last,val)
:查找数组或容器 [first,last) 范围内大于等于val元素的位置,数组返回该位置指针,容器返回该位置迭代器
upper_bound(first,last,val)
::查找数组或容器 [first,last) 范围内第一个大于val值的元素的位置,数组返回该位置指针,容器返回该位置迭代器
如果没有找到该元素,返回val应该插入的位置的指针或迭代器
sort
对数组指针或容器迭代器 [t1,t2) 的元素排序,sort(a,a+10,cmp)
,默认小到大,第三个参数是比较函数,非必填
cmp函数
- 基本数据类型
bool cmp(type a, type b){ return a>b; }
- 结构体
bool cmp(node a,node b){ return a.x>b.y; // 按照x的大小将结构体从大到小排序 }
- 容器
bool cmp(string a,string b){ return a>b; }
这篇关于C++ STL的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-25【机器学习(二)】分类和回归任务-决策树(Decision Tree,DT)算法-Sentosa_DSML社区版
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享