除了队列,优先队列,栈没有clear函数,其他stl容器都有clear函数
二元组比如 q.find({int,string})//里面两个字符类型
vector 倍增思想,均摊时间复杂度
要用头文件< vector >
定义:vector< int >a;定义一个int数组 vecto< int >b[200] 定义了200个vector,也可以看成二维数组,一维是静态,二维是动态; 也可以定义结构体;
支持比较运算,按照字典序比较
vector里面的函数:
a.size():计算数组长度 a.empty():表示数组是不是空的,返回是bool,空的是true,这两个函数大部分stl都有,含义也差不多;a.clear:把当前数组清空,变成零;
迭代器:vector< int >::iterator it =a.begin() (a.begin就是第一个元素的地址,a.end就是最后一个后一个地址);随机迭代器,支持相加减,比如 it+2就是访问了a[2],it就是a[0];取值就是*it;
定义
vector <int> a;
vector<int> a[10]; // 定义10个vector
vector<int> a(10); // 定义一个长度为10的vector
vector<int> a(10,3); // 定义一个长度为10的vector,并初始化为3
遍历
for (int i = 0; i < a.size(); i ++ ) cout << a[i] ; // 用数组下标遍历
for(auto x : a) cout << x ; // C++11新特性 范围遍历
for(vector<int>::iterator i = a.begin();i != a.end(); i ++ ) cout << *i ; // 用迭代器遍历
for(int x:a) cout<<x<<' '<<endl:范围遍历
(a.begin()是a[0],a.end()就是a[a.size()],也就是a最后一个元素的下一个元素)
函数
cout<<a.front()<<' '<<a[0]<<' '<<*a.begin();都是等价的,输出第一个元素
cout<<a.back()<<' '<<a[a.size()-1]<<' ';最后一个元素;
a.push_back(4);数组的最后添加一个元素4
a.pop_back();删除最后一个元素
队列 :在队尾插入,队头弹出
要用头文件<queue>
定义:queue<int> q;队列 性质:性质:先进先出 1,2,3->1,2,3
//
函数
priority_queue<int>q;大根堆,输出最大值
priority_queue<int,vector<int>,greater<int>> q;小根堆,输出最小值
q.push(1):在队尾插入一个元素 q.pop():弹出队头元素 q.front:返回队头 q.back():返回队尾 q.top():取最大值
q.pop():删除最大值 q=queue<int>():初始化,清空队列
栈:在队尾弹出,队头插入
头文件<stack>
性质:先进后出 弹出的最后一个进的 1,2,3->3,2,1
定义:stack<int>stk;
函数
stk.pust(1);
stk.top();
stk.pop();
双端队列:两头都可以插入,弹出
头文件<deque>
定义:deque<int>q;
迭代器:set<int>::iterator it =a.begin(); it++//在有序序列的下一个元素 it--//在有序序列的前一个元素 p.end;//最后一个元素后一个位置
函数
q.begin();q.end();//返回deque的头尾迭代器 q.front(); q.back();队头/队尾元素
q.push_back():最后插入一个元素 q.push_front():开头插入一个元素 p[0]随机访问一个元素
q.pop_back():弹出最后一个元素 q.pop_front():弹出第一个元素 q.clear():清空
集合:set
头文件<set>
定义 set <int> q;//元素不能重复 multiset <int> q;//元素可以重复
函数
q.size; q.empty q.clear 与vector差不多
q.insret(x);表示插入一个x元素;q.find(x):查找一个x;
if(q.find(x)==q.end()) //判断x在q中是否存在
q.lower_bound(x); //找到大于等于x的最小元素的迭代器
q.upper_bound(x); //找到大于x的最小元素的迭代器
q.erase(x);//表示把x的所有迭代器删掉 q.erase(it);//表示it迭代器删掉
q.count(x);//表示x在a里面的个数
无序 set 不支持二分
头文件<unordered_set>
定义:unordered_set<int>q;//实现哈希表,不能存储重复元素
unordered_multiset<int>q//哈希表,元素可以重复
与set类似 没有lower_bound ,upper_bound这两个函数
map 映射
头文件<map>
定义:map<int,int>a;//定义类型随意
函数
size/empty/clear/begin/end 均与set类似
insert/erase 与set类似,但里面参数与定义参数相同
无序 map 不支持二分
头文件<unordered_map>
定义:unordered_map<int,int>q;
bitset
头文件<bitset>
定义:bitset<10000>q;很长很长的二进制串
函数
a.reset(3);把第三位设成零;
pair
定义:pair<int,string>q; q={1,"jzy"};或者是q=make_pair(1,"jzy");//赋值
cout<<a.first<<' '<<a.second<<endl;//输出pair里面元素
用处:比较运算,先比较first