常用STL(算基/方便查找)
作者:
Licox
,
2024-01-12 00:07:41
,
所有人可见
,
阅读 76
#include <iostream>
#include <vector>
#include <queue>
#include <stack>
#include <deque>
#include <set>
#include <map>
using namespace std;
//记得打对应的头文件
int main()
{
/*1.vector
vector<int> a;
for (int i=0;i<10;i++) a.push_back(i);
for (int i=0;i<a.size();i++) cout<<a[i]<<' ';//第一种遍历
cout<<endl;
cout<<a.size()<<endl;
cout<<a.front()<<endl;//a[0],第一个
cout<<a.back()<<endl;//a[a.size()-1],最后一个
for (auto i=a.begin();i!=a.end();i++) cout<<*i<<' ';//第二种遍历
//a.begin()==a[0],a.end()==a[a.size()]
//此处auto为vector<int>::iterator
cout<<endl;
if(!a.empty()) cout<<a.front()<<endl;//a.empty查看是否为空
for (auto b:a) cout<<b<<' ';//第三种遍历
//C++ 11的范围遍历
cout<<endl;
a.clear();//清空数组
//example
for (int i=10;i<20;i++) a.push_back(i);
for (int i=0;i<10;i++) cout<<a[i]<<' ';
cout<<endl;
*/
/*2.pair
p.first为第一个元素
p.second为第二个元素
支持比较运算 按先一后二(字典序)排列
*/
/*3.string 是个类 size()/length() 返回长度
string c="asd";
c+="fgh";//可以直接连接
cout<<c.substr(2,2)<<endl;//substr(子串开头,子串长度)
printf("%s\n",c.c_str());//由于printf无法直接输出string,需要转化才可以
if(!c.empty()) cout<<"yes"<<endl;//查空
c.clear();//清空字符串
//example
c+="nmb";
cout<<c<<endl;
*/
/*4.queue 同样也有size和empty 无clear
queue<int> d;
for (int i=0;i<5;i++) d.push(i);//插入(从队尾插入)
cout<<d.front()<<' '<<d.back()<<endl;//队头 队尾
d.pop();//弹出队头
cout<<d.front()<<endl;
//d=queue<int> ();//清空队列
*/
/*5.priority_queue 优先队列 同样也有size和empty 无clear 默认为大根堆
priority_queue<int> e;
for (int i=0;i<5;i++) e.push(i);
cout<<e.top()<<endl;
e.pop();
cout<<e.top()<<endl;
//小根堆写法
priority_queue<int,vector<int>,greater<int>> heap;
for (int i=0;i<5;i++) heap.push(i);
cout<<heap.top()<<endl;
heap.pop();
cout<<heap.top()<<endl;
*/
/*6.stack 栈 同样也有size和empty 无clear
stack<int> f;
for (int i=0;i<5;i++) f.push(i);//插入
cout<<f.top()<<endl;//输出栈顶元素
f.pop();//弹出栈顶元素
cout<<f.top()<<endl;
*/
/*7.deque 双端队列
size()
empty()
clear()
front()/back()
push_back()/pop_back()
push_front()/pop_front()
begin()/end()
[](向用数组一样用)
*/
/*测试
deque<int> g;
g.push_back(2);
cout<<g.front()<<endl;
g.push_front(1);
cout<<g.front()<<endl;
g.pop_front();
cout<<g.front()<<endl;
for (auto i=g.begin();i!=g.end();i++) cout<<*i<<' ';
*/
/*8.set/multiset map/multimap
size()
empty()
clear()
begin()/end() ++、--返回前驱和后继 (就是某个数的前一个数和后一个数) O(logn)
set/multiset
insert() 插入某个数
find() 查找一个数
count() 返回某一个数的个数
erase()
(1) 输入一个数x,删除所有的x O(k+logn)
(2)输入一个迭代器,删除这个迭代器
lower_bound()/upper_bound()
lower_bound(): 返回大于等于x的最小的数的迭代器(最小上界)
upper_bound(): 返回大于x的最小的数迭代器(最大下界)
map/multimap
insert() 插入的数是一个pair
erase() 输入的参数是一个pair或者迭代器
find()
[] (multimap不支持) O(logn)
*/
/*测试
map<string,int> h;
h["asd"]=1;
cout<<h["asd"]<<endl;*/
/*9.unordered_set,unordered_map,unordered_multiset,unordered_multimap 哈希表
与上面类似,但是不支持lower_bound()/upper_bound() O(1)
不支持迭代器的++、--
/*10.bitset 压位
bitset<10000> s; //<>内为个数
支持~,&,|,^
<<,>>
==,!=
[]
count() 返回有多少个1
any()/none() 判断是否至少有一个1/判断是否全为0
set() 把所有位移成1
set(k,v) 把第k位变成v
reset() 把所有位变成0
flip() 等价于~
flip(k) 将第k位取反
*/
return 0;
}