vector<>

基本操作

操作 描述 时间复杂度
push_back() 在尾部插入一个元素 O(1)
pop_back() 弹出最后一个元素 O(1)
size() 返回元素个数 O(1)
[ ] 随机访问元素 O(1)
front() 返回第一个元素 O(1)
back() 返回最后一个元素 O(1)
#include<iostream>
#include<algorithm>
#include<vector>
#include<stack>
#include<queue>
#include<set>
#include<map>
#include<utility>
using namespace std;

int main(){
    vector <int> a;
    a.push_back(1);          
    a.push_back(2);
    a.push_back(3);
    a.push_back(4);
//    也可用循环插入 

    cout<<a.size();

    cout<<a[0]<<endl;

    cout<<a.front()<<endl;
    cout<<a.back()<<endl;

    for(auto it=a.rbegin();it!=a.rend();it++){
        cout<<*it;
    }
    cout<<endl;
    for(auto it=a.begin();it!=a.end();it++){
        cout<<*it;
    }
    cout<<endl;

    a.pop_back();

    for(int i=0;i<a.size();i++){
        cout<<a[i];
    }
    return 0;
}

自定义大小

v1.resize(110);

逆序

reverse(a.begin,a.end);

pair

pair存储一个二元组,可以存储任意类型。
若存储元素可以比较,先比较第一关键字;若第一关键字相等,再比较第二关键字。
默认升序;
按照题目的要求可手写出compare函数用于sort或重载比较运算符

#icnlude<utility>
#include<assert.h>
pair<int ,int> p1;
p1.first;
p1.second;
assert(p1<p2); assert断言,自行百度

priority_queue<>

优先队列,堆;默认内部降序,大根堆;
基本操作

操作 描述 时间复杂度
push() 向堆里插入一个元素 O(logn)
pop() 弹出最后一个元素 O(1)
size() 返回元素个数 O(1)
empty() 判断是否为空 O(1)
top() 返回第一个元素(即最大元) O(logn)
//1.降序优先队列
priority_queue<int,vector<int>,less<int>> pq;等价于priority_queue<int> pq;
//2.升序优先队列
priority_queue<int,vector<int>,greater<int>> pq;
pq.push();
pq.top();
pq.pop();

set

内部红黑树维护实现,默认升序。

基本操作

操作 描述 时间复杂度
insert() 插入一个元素 O(logn)
erase() 删除一个元素 O(logn)
find 按值查找,返回元素迭代器,找不到返回end O(logn)
lower_bound() 找大于等于值的第一个元素,返回其迭代器,找不到返回end O(logn)
upper_bound() 找大于值的第一个元素,返回其迭代器,找不到返回end O(logn)
begin() 最小元素迭代器,*解除引用 O(1)
end() 尾迭代器,在最后一个元素的后面一个 O(1)
++/-- 移动迭代器 O(logn)
size() 返回元素个数 O(1)
empty() 判断是否为空 O(1)
    set<int> s;  //能比较 
    s.insert(1); //重复元素只记录一次 
    s.insert(5); 
    s.insert(6); 
    s.erase(1);
    auto it=s.find(100);
    cout<<*it<<endl;
    for(auto it=s.begin();it!=s.end();it++){
        cout<<*it<<" ";
    }