C++标准模板库(STL,Standard Template Library):直接调用,可以节省时间
四个组件:容器,算法,迭代器,仿函数
一:向量vector
#include
1.构造:vector vec;
vector vec2;
vector arr(100,1);//构造初始长度100的int数组,初值为1。
vector<vector> dp(5,vector(6,10));//二维数组,5行6列,等价于int arr[5][6].
3.尾接和尾删
arr.push_back(1);//在arr数组的尾部加入1.
Arr.pop_back();//删除arr数组尾部的数.
4.获取数组长度
arr.size();//获取arr这个数组的长度.
5.快速清空数组和确认是否清空
arr.clear(); arr.empty();//bool值,空则返回true,非空返回false.
6.改变数组长度
arr.resize(5);//将arr数组长度改变为5.
遍历数组:for(int i=0;i<arr.size();i++)
二:栈stack,先进先出
进栈:stk.push();
出栈:stk.pop();
注意:不可访问栈内元素。
三:队列queue,先进后出
进队:que.push();
出队:que.pop();
四:优先队列priority queue
提供常数时间的最大元素查找,对数时间的插入与提取,底层原理是二叉堆。
priority_queue<int,vector,greater> pque;//将int改成long就会变成小顶堆,输入进最小值。
pque.push(1);
cout<<pque.top()<<endl;
pque.push(3);
cout<<pque.top()<<endl;
pque.push(2);
cout<<pque.top()<<endl;
pque.push(4);
cout<<pque.top()<<endl;
将会输出:1 3 3 4(每次都输入进最大值)
注意事项:仅仅堆顶可以修改。
五:集合set
插入元素:st.insert();
擦除元素:st.erase();
清空元素:st.clear();
判断空:st.empty();
查找元素:st.find();
判断元素是否存在:st.count();
遍历(迭代器):for(set::iterator it = st.begin();it != st.end();++it)
cout<<it<<endl;
基于范围的循环遍历(c++ 11):for(int &ele :st)
Cout<<ele<<endl;
适用范围:元素去重,维护顺序,元素是否出现过.
注意事项:set虽说可遍历,但仅可使用迭代器进行遍历,它不存在下标这一概念,无法通过下标访问到数据。
cout<<st[0]<<endl;(错误)
cout<<*st.begin()<<endl;(正确)
六:映射map:任意类型到任意类型的映射
查询元素:mp.find();
擦除元素:mp.erase();
查询元素出现次数:mp.count();
判断是否是空:mp.empty();
清除元素:mp.clear();
遍历(迭代器):太麻烦
for(map<int,int>::iterator it = mp.begin();it != mp.end();++it)
cout<first<<’’<second<<endl;
基于范围的循环遍历(c++ 11):
for(int &ele :mp)
cout<<ele.first<<’’<<ele.second<<endl;
eg:
快速排序:sort(arr.begin(),arr.end())
七:string
取位:string s1=”123456”;
cout<<s1.substr(3,5)<<endl;//从第三位取五个元素
转换类型:string s=”12312233”;
long double x=stold(s);//转换成double型
int x=66664;
string s=to_string(x);//int类型转换成string型
八:二元组pair
构造:pair<int,int> p=make_pair(1,2);
或pair<int,int> p={2,2};
迭代器:有些数组没办法用下标完成遍历,非线性的数据结构遍历用迭代器。
如无必要,最好不用迭代器操作容器。
九:算法
1.swap(a,b);//交换a和b
2.sort(arr.begin(),arr.end());//给arr数组进行从大到小排序,加第三个参数greater(),便可实现从大到小排序
3.Int pos = upper_bound(arr.begin().arr.end(),9)-arr.begin();
cout<<pos<<endl;//二分查找法,在arr数组中从开头开始查找比9大的数,并显示这个数所在的位置
4.reverse(arr.begin()+2,arr.begin()+5);//从arr的第二位到第五位开始反转arr数组
5.cout<<min(min(1,3),2)<<end;//打印最小值
或cout<<min({1,2,3,4})<<end;
6.unique()常用构造:去重
7.数学函数