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<<" "; }