大部分都是网上总结的(滑稽)
1.一些非常实用的函数,比如说找到下一个排列的 ,帮助有序数组去重的 ,线性找数组前k大的 ……
2.在 上可以二分查找,有 , 和 函数。
3.vector代替queue和stack还能稍微快一些。所以不建议使用queue和stack,内置的栈和队列出奇的慢。
4.优先队列,维护数列的极大值,效率很慢,比手写二叉堆还慢不少,好像set都比它快些使用的话,主要是dijkstra的优化,用优先队列可以简化代码(但效率贼慢)。
5.nth_element(first,nth,last) 将第k大的元素放到它该放(第K个)的位置上,左边元素都小于它,右边元素都大于它.
first,last 第一个和最后一个迭代器,也可以直接用数组的位置。
nth,要定位的第nn 个元素,能对它进行随机访问.
6. vector:
1 .vector开辟空间是动态的,即声明时vector<int>m[1e8] 都行,最后实际大小是你push_back的大小,用多少开辟多少
2.vector存数据时必须push_back();但当你存完了,用它里面的东西时,直接可以用下标找,比如 输出时
for(int i=0;i<n;i++)
for(int j=0;j<m[i].size();j++)
cout<<m[i][j]
当然最硬核的就是用迭代器了
vector<int>::iterator it;
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<endl;
3.常用操作:
(1)头文件#include<vector>.
(2)创建vector对象,vector<int> vec;
(3)尾部插入数字:vec.push_back(a);
(4)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的。
(5插入元素: vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;
(6)删除元素: vec.erase(vec.begin()+2);删除第3个元素
vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始
(7)向量大小:vec.size();
用法: max=*(--s.end());
(8)清空:vec.clear();
7. set集合
1).set.begin() 返回集合的首迭代器,即指向集合中最小元素的迭代器,时间复杂度为O(1)
map<int>::iterator it=s.begin();
min=*it
也可以
min=*(s.begin)
2).set.end()
返回集合的尾迭代器,众所周知,STL中区间都是左闭右开的,那么end()函数返回的迭代器即为指向集合中最大元素的下一 个位置的迭代器,因此--s.end()才是指向集合中最大元素的迭代器,时间复杂度为O(1)
用法: max=*(--s.end());
未完待续..