1、vector容器去除前导0
#include <algorithm>
//一般只能去除vector末尾的0 所以需要反转
//适用于000011111 反转reverse 为 111110000
reverse(v2.begin(),v2.end());
while(v2.size()>1 && v2.back()==0)v2.pop_back();2、vector容器去重
vector<int> v;
sort(v.begin(),v.end());//先排序
v.erase(unique(v.begin(),v.end()),v.end());3、stack容器
//1、定义
stack<int> s;
//2、入栈
s.push(x);
//3、出栈
s.pop();
//4、栈长度
s.size();4、deque容器 双端队列
//1、定义
#include<deque>
deque<int> dq;
//2、入队
dq.push_back();
dq.push_front();
//3、出队
dq.pop_back();
dq.pop_front();
//4、队头 队尾元素
dq.front();
dq.back();
//5、队头 队尾指针
dq.begin();
dq.end();
//6、清空队列
dq.clear();5、map与unordered_map 哈希表
5.1、区别
map内部实现了一个红黑树(红黑树是非严格平衡二叉搜索树,而AVL是严格平衡二叉搜索树),红黑树具有自动排序的功能,因此map内部的所有元素都是有序的,红黑树的每一个节点都代表着map的一个元素。因此,对于map进行的查找、删除,添加等一系列的操作都相当于是对红黑树进行的操作。
unordered_map内部实现了一个哈希表 (也叫散列表,通过把关键码值映射到Hash表中一个位置来访问记录,查找的时间复杂度可达到O(1),其在海量数据处理中有着广泛应用)。因此,其元素的排列顺序都是无序的。
5.2、代码
//1、头文件
#include<map>
#include<unordered_map>
//2、定义
map<int,int> mii;
unordered_map<int,int> umii;//<key,value>
//3、方法
// 遍历输出+迭代器的使用。
umii.begin():
umii.end();
auto iter = umii.begin();
while(iter!=umii.end())
{
cout<<iter->first<<" "<<iter->second<<endl;
iter++;
}
umii.size();
umii[key] = value;
umii.at(key);
umii.find(key);//返回迭代器
umii.insert(pair<int,int>(3,5));
umii.inser({{key,value},{key,value}});
6、priority_queue优先队列(默认是大根堆)
---------------------------------------------------------定义<int>----------------
#include <queue>
// 大根堆
priority_queue<int> pq;
//小根堆
priority_queue<int, vector<int>, greater<int>> pq_min;
---------------------------------------------------------定义pair<int,int>------------
typedef pair<int, int> PII;
// 定义一个小根堆,并且按照pair的第一个进行排序的
priority_queue<PII, vector<PII>, greater<PII>> heap;
---------------------------------------------------------操作-----------------
pq.empty(): 检查队列是否为空。
pq.size(): 返回队列中的元素数量。
pq.top(): 返回队列顶部的元素(不删除它)。
pq.push(): 向队列添加一个元素。
pq.pop(): 移除队列顶部的元素。7、结构体带排序
//定义
struct EDGE
{
int a,b,w;
}edge[M];
//定义排序规则 按照w的大小从小到大排序
bool cmp(EDGE a,EDGE b)
{
return a.w<b.w;
}
//实现排序
sort(edge,edge+m,cmp);8、set
9、string
string str;
//返回字符串的长度。
str.size();
//检查字符串是否为空。
str.empty();
//访问下标为k的元素。
str[k];
str.at(k);
//复制子字符串,pos开始的len个字符的拷贝
string s = str.substr(pos, len);
//查找子字符串在主字符串中的下标。
find();
//在字符串末尾添加内容。
str=str+"string";
//比较两个字符串。
str.compare("string");
//在指定位置插入内容。
str.insert(pos, "inserted");