1.vectorvectorint arr; vectorint brr(5,0);//第一个是数组大小第二个是初始化的数值 vectorvectorint crr(5, vectorint(6, 0)); //二维数组五行六列初始化为0 vectorvectorvectorint drr(5, vectorvectorint(6, vectorint(7, 0)));//三维数组 arr.push_back(1); arr.push_back(1); arr.pop_back(); arr.clear();//清空 arr.push_back(1); arr.empty();//检查是否为空,返回值为bool型 for (auto ele : arr)//使用迭代器 { cout ele endl; } arr.resize(5, 0);//改变数组长度第一个为大小第二个为初始化数值 arr.size();//求长度 //注意空vector直接用[]会出错所以可伴随arr.size()使用 //用[]下标注意从0开始 int lastvector.back();//获取最后一个元素如果是空的会报错 vector.back()10;//返回的是引用所以可以直接修改一般情况 vector 可以替换掉普通数组除非该题卡常。有些情况普通数组没法解决n×m 的矩阵1≤n,m≤106 且 n×m≤106如果用普通数组int mat[1000010][1000010]浪费内存会导致 MLE。如果使用vectorvectorint mat(n 10, vectorint (m 10))完美解决该问题。另外vector 的数据储存在堆空间中不会爆栈。注意1.如果长度已确定直接先指定长度一个个push_back会重分配容易MLE2.获取长度.size()返回值类型为size_t,32位编译器范围到2^32如果直接两个size相乘可能溢出应注意存储数据时进行数据类型的转换。2.栈stackdouble stk; stk.push(1.0); stk.push(1.4); cout stk.top() endl;//输出栈顶 stk.pop();//弹出栈顶 cout stk.size() endl;//查大小 cout stk.empty() endl;//判空没有clear函数 //可以用vector模拟栈注意1.栈不可访问内部元素2.先进后出3.队列queueint que; que.push(1); que.push(2); que.push(3); que.pop();//移出去的是第一个元素 cout que.front() endl;//2 cout que.back() endl;//3 cout que.size() endl; coutque.empty()endl;注意1.队列不可访问内部元素2.先进先出4.优先队列取出最大值堆顶O(1),插入删除O(log n)priority_queueint pque; //存储int的大顶堆从大到小 priority_queueint, vectorint, greaterint pquee2; //存储int的小顶堆从小到大 pque.push(1); pque.push(2); pque.push(3); cout pque.size() endl;//大小 pque.push(4); coutpque.empty()endl;//判空 pque.push(1); pque.pop(); coutpque.top()endl;//输出最大元素注只可访问堆顶不可用下标访问堆中元素不可修改pque.top()1;//是错误用法5.集合set:元素互异有序从小到大multiset:元素可重复有序从小到大unordered_set:元素互异无序判断元素是否出现过元素数量10^6比数组好用增删查时间复杂度O(log n)setint st;//存储int的集合从小到大 setint, greaterint st2;//从大到小 st.insert(1);//插入 st.insert(2);//插入 st.insert(2);//插入 st.insert(0);//插入 st.insert(2);//插入 if (st.count(2)) //返回该元素的个数set存在返回1不存在返回0multiset返回个数 { cout yes endl; } cout st.size() endl;//大小 st.clear();//清空 cout st.empty() endl; for (auto ele : st)//遍历 { cout ele endl; }注set只可用迭代器遍历但不存在下标无st[0]这样的说法迭代器是只读的所以*st.begin()1;//是错误的赋值不可取set不能像vector一样用迭代器相减计算下标set没有pop操作可用迭代器删除元素6.键值对map:键互异有序从小到大multimap:键可重复有序从小到大unordered_map:键互异无序mapint, int mp;//键是不可重复的(一个键不能对应多个值) mp[2] 1;//添加元素 mp.erase(2);//删除键 mp[2] 3; cout mp.count(2) endl; //检查键的个数对于map存在返回1不存在返回0如果是multimap存在返回键的个数 cout mp.size() endl;//键值对的个数 mp.clear();//清空 cout mp.empty() endl;//判空 if (mp.find(2) ! mp.end())//返回该键对应的迭代器 { cout yes endl; } else { cout no endl; } //基于范围的循环 for(auto pr:mp) { coutpr.firstpr.secondendl; } mp[0]//用map访问一个不存在的键会直接创 建这个键初值为1注map可用于统计一个文章用每个单词的出现次数map不可跟vector一样用迭代器计算下标7.string用而不是不然容易超时string s; string s2 (3,1); //(长度,初值)每个字符都是这个初值 string s1 12345678; s1.substr(3, 1);//起点下标子串长度 if (s1.find(123) ! string::npos) cout yes endl; //找子串是否存在 int x stoi(s1);//string转int long long y stoll(s1); int x 999; string s3 to_string(x);//int转string cout x endl;注string的find()函数用的是暴力时间复杂度O(n^2),慎用8.二元组pairint, int p1 make_pair(1,2);//老式写法 pairint, int p2 { 1,2 };//c11之后的写法 cout p1.first p1.second endl; if (p1 p2)//可以判重 { cout yes endl; } pairpairint, char, int p;//三元组9.迭代器对非线性结构树...下标无意义迭代器-迭代器迭代器的距离10.常用算法swap();sort();#includebits/stdc.h using namespace std; bool cmp(pairint,int a,pairint,int b) {//先第二位从小到大 if (a.second ! b.second) { return a.second b.second; } //第二位相等第一位从大到小 return a.first b.first; //注不能用或 因为两元素相等一定要返回flase,不然会出错 } int main() { string a awa,bbwb; swap(a, b); cout a b endl; vectorint arr{ 1,9,1,9,8,1,0 }; sort(arr.begin(), arr.end());//从小到大 sort(arr.begin(), arr.end(), greaterint());//从大到小 vectorpairint, int arr1{ {1,9},{2,9},{8,1},{0,0} }; sort(arr1.begin(), arr1.end(), cmp);//自定义 reverse(arr.begin(),arr.end());//翻转 max(max(1, 2), 3);//比较三个数可套娃使用 return 0; }lower_bound();x的第一个元素的位置upper_bound();x的第一个元素的位置reverse();//翻转max();min();unique();//消除相邻的重复元素可排序之后使用max(max(1, 2), 3);//比较三个数可套娃使用 sort(arr.begin(), arr.end()); //unique(arr.begin(), arr.end());//返回值为有效数据的迭代器 arr.erase(unique(arr.begin(), arr.end()));数学函数abs(1.0);//数的绝对值 exp(2);//e的x次方 log(3);//lnx pow(2, 3);//x的y次方次方是分数也可以 sqrt(2);//根号x ceil(1.1);//向上取整 floor(2.1);//向下取整 round(2.4);//四舍五入返回值为double型把小数变为最接近的整数gcd,lcm函数c17才有自己写参考宝藏视频【【C】算法竞赛常用 STL 用法】https://www.bilibili.com/video/BV1L8411y7th?vd_source3454b81e777238fd36a1725a4c3b1790参考大佬文档文档在线查看https://io.zouht.com/154.html ​编辑Markdown 原文件https://run.sh.cn/stlmd