·vector
·queue
·priority_queue
·deque
·set
·map
·stack
·sort
·upper_bound,lower_bound,binary_search
<更新提示>
<第一次更新>
<正文>
c++stl自带的不定长数组。
头文件:#include
定义:vector
(定义type类型的vector)
常用函数:
#include
using namespace std;
int main()
{
vector<int>v;
v.reserver(n);//扩大容量为n
v.clear();//清空容器
v.erase(pos);//删除位置为pos的元素
v.erase(begin,end);//删除区间[begin,end)的所有元素
v[i];//访问第i个元素,用法与数组相同
v.front();//返回第一个元素
v.back();//返回最后一个元素
v.push_back(e);//在尾部添加元素e
v.pop_back();//移除最后一个元素
}
c++stl自带队列。
头文件:#include
定义:queue
(定义type类型的queue)
常用函数:
#include
using namespace std;
int main()
{
queue<int>q;
q.clear();//清空容器
q.erase(pos);//删除位置为pos的元素
q.erase(begin,end);//删除区间[begin,end)的元素
q.push(a);//将元素a加入队列
q.front();//返回队头元素的值
q.back();//返回队尾元素的值
q.size();//返回队列中的元素个数
q.empty();//返回队列是否为空
}
c++stl自带优先队列(堆)。
头文件:#include
定义:
priority_queue< type,vector
(定义type类型的大根堆)
priority_queue< type,vector
(定义type类型的小根堆)
常用函数:
#include
#include
using namespace std;
int main()
{
priority_queue< int,vector<int>,less<int> >q;
q.clear();//清空容器
q.push(a);//将元素a加入堆
q.top();//取出堆顶元素
q.pop();//弹出堆顶元素
q.empty();//返回堆是否为空
q.size();// 返回堆中元素个数
}
c++stl自带的双端队列。
头文件:#include
定义:deque
(定义type类型的deque)
常用函数:
#include
using namespace std;
int main()
{
deque<int>d;
d[i];//访问第i元素,用法与数组相同
d.clear();//清空容器
d.front();//返回第一个元素
d.back();//返回最后一个元素
d.pop_back();//弹出尾元素
d.pop_front();//弹出首元素
d.push_back();//加入尾元素
d.push_front();//加入首元素
}
c++stl自带的集合容器。
头文件:#include
定义:
set< type,less
(内部升序排序的set)
set< type,greater
(内部降序排序的set)
常用函数:
#include
using namespace std;
int main()
{
set<int>s;
s.count(t);//返回集合中元素t的个数
s.empty();//返回集合是否为空
s.size();//返回集合中元素的个数
s.insert(t);//插入元素t
s.insert(begin,end);//插入区间[begin,end)中的所有值
s.erase(pos);//删除位置为pos的元素
s.erase(begin,end);//删除区间[begin,end)的所有元素
}
集合不允许重复的元素存在,而multiset允许重复的元素存在。其所有常用用法均与set相同。
c++stl自带的一种提供键与值一一对应的数据存储结构,类似于python的字典(dictionary)。
头文件:#include
定义:map
(定义键类型为key,值类型为value的map)
常用函数:
#include
using namespace std;
int main()
{
map<int,int>m;
m[n];//访问map中键为n的元素,与数组相同
m.count(n);//返回map中键为n的元素个数
m.find(n);//返回指向键为3的迭代器,如果不存在,返回m.end()
m.empty();//返回map是否为空
m.size();//返回map中的元素个数
m.erase(e);//删除键为e的元素
m.insert(make_pair(key,value));//在map中加入键为key,值为value的元素
}
map中同样不允许重复元素的存在,而multimap允许重复元素存在,其所有常用用法均与map相同。
c++stl自带的栈容器。
头文件:#include
定义:stack
(定义type类型的stack)
常用函数:
#include
using namespace std;
int main()
{
stack<int>s;
s.size();//返回栈中元素个数
s.empty();//返回栈是否为空
s.clear();//清空栈
s.top();//返回栈顶
s.pop();//栈顶出栈
s.push(a);//将元素a加入队列
}
c++算法库自带的快排函数。
头文件:#include
用法:sort(begin,end,cmp)
(对区间[begin,end)进行排序,若不传入参数cmp,使用默认的operator <进行排序,即升序,从小到大)
cmp函数的写法:
inline bool cmp(int a,int b)
{
if(a>b)return true;else return false;
}
代码片是一个从大到小,降序cmp函数的写法。
cmp函数必须为bool类型,在形参中定义两个需要排序类型的参数。根据你需要的条件对形参进行判断,若返回true则形参中的第一个排在前面,若返回false则形参中的第二个排在前面。在sort排序时调用其作为第三个形参即可。
这是三个c++stl自带的二分查找函数。
头文件:#include
用法:
upper_bound(begin,end,value)
(返回有序区间[begin,end)中第一个大于value的元素位置,注意返回的时地址,如需使用要在调用后加上“-数组名”)
lower_bound(begin,end,value)
(返回有序区间[begin,end)中第一个大于等于value的元素位置,注意返回的时地址,如需使用要在调用后加上“-数组名”)
binary_search(begin,end,value)
(返回有序区间[begin,end)中是否存在value,不指明位置)
这三个函数都是在有序区间内使用的函数,原理时二分查找,时间复杂度为 O(nlog2n) O ( n l o g 2 n ) 。
这些都是OI竞赛中常用的c++stl自带函数或容器,能很好的帮助我们实现代码,需要我们灵活运用,成为我们的助手。并且这些函数和容器全部允许在noip中使用,需要我们很好的掌握。
<后记>
<废话>