常用stl

1.vector(向量)

vector<int>(n);
vector<vector<int>> a(n,vector<int>(n) );//n行n列
vector<vector<int>> a(n,vector<int>() );//n行,不指定列数


大小:int n=v.size();
尾部加入:v.push_back();
尾部删除:v.pop_back();
随机插入:v.insert(v.begin()+2,id);//v[2]=id,原位置的依次往后挪
随机删除:v.erase(v.begin()+1,v.begin()+3);//左闭右开,删除v[1]v[2]

2.stack

stack<int> st;

大小:int n=st.size();
栈顶加入:st.push(1);
栈顶弹出:st.pop();
取栈顶:int w=st.top();

3.queue

queue<int> q;

大小:int n=q.size();
队尾加入:q.push(1);
队首弹出:q.pop();
取队首:int f=q.front();
取队尾;int w=q.back();

4.deque(双端队列 首尾都可插入删除)

deque<int> q;

大小:int n=q.size();
首尾插入:q.push_front()/q.push_back();
首尾弹出:q.pop_front()/q.pop_back();
取队首:int f=q.front();
取队尾;int w=q.back();

5.priority_queue(优先队列)

priority_queue<int> q;//从大到小
priority_queue<int,vector<int>,greater<int>> q;//从小到大
priority_queue<pair<int,int>> q;//先按first排序,再按second排序

大小:int n=q.size();
插入:q.push(1);
队首弹出:q.pop();
取队首:int f=q.top();

6.map(映射)

map<int,int> mp;
(容器中的每个存储对为一个键值对,
map会按照键的顺序从小到大自动排序)

大小:int n=mp.size();
是否存在:bool f=mp.count(键)
遍历:for(auto [a,b]:mp)

7.set(集合)

set<int> s;(自动从小到大排序)

大小:int n=s.size();
插入:s.insert(1);
删除:s.erase(1);
是否存在:int ok=s.count(1);
遍历:for(auto k:s)

8.string

string s;
cin>>s;//读入字符串,遇空格,回车结束
getline(cin,s);//读入字符串(包括空格),遇回车结束
注意: 若前面已有输入(如cin>>n),getline(cin, s)会获取前一个输入的换行符,需要在前面添加读取换行符的语句,如:getchar()。

大小:int n=s.size();
尾部插入:char c='a'; string a="abc"; s+=c; s+=a;
随机插入:s.insert(s.begin()+2,'w');//类似于vector
随机删除:s.erase(s.begin()+1,s.begin()+3);//类似于vector
查找:int id=s.find("abc");//返回首次出现位置的下标,若不存在返回一个大数
子串截取:string str=s.substr(0,1);//参数是下标,不是迭代器!从0开始长为1。

9.算法函数
sort(a.begin(),a.end(),cmp);//cmp函数参数最好加上引用&,加快速度。

reverse(a.begin(),a.end());//可翻转数组,向量,字符串。

string s=to_string(n);//数字n转成字符串。

int w=lower_bound(s.begin(),s.end(),4)-s.begin();
(s是vector或者string, 目标索引减去初始索引即下标)

set.upper_bound(1)
(返回的也是迭代器,但不支持像上面的加减,无法获取具体索引,一般用来查看某元素是否存在于set中)

posted @ 2026-02-25 23:55  spark_of_fire  阅读(9)  评论(0)    收藏  举报