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";

如果要读入或者输出整个字符串,只能用 cincout头文件#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的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程