参考资料:
1 vector
可用来实现图论中的邻接表
1.1 头文件
#include<vector>
1.2 创建
vector<int> a;
vector<int> a(10);
vector<int> a(10, 1);
1.3 常用方法
a.size();
a.empty();
a.clear();
a.front();
a.back();
a.push_back(x)
a.pop_back()
此外,vector 还支持比较运算,比较方法为字典序比较。
1.4 常用技巧
1.4.1 遍历vector
for(int i=0;i<a.size();i++){
cout<<a[i]<<' ';
}
2 pair
不是很常用
2.1 头文件
#include<utility>
2.2 创建
pair<int, int> p1(1, 2);
pair<int, int> p2;
p2 = make_pair(1, 2);
2.3 访问
p1.first;
p2.second;
3 string
3.1 头文件
#include<string>
3.2 创建
string s = "12345";
3.3 常用方法
s.substr(1, 3);
s.substr(2);
s.push_back('0');
string s = "123";
string b = "hello";
s.insert(1, b, 0, 2);
s.clear()
s.empty()
s.size()
stoi(s, n, b)
string s = "1010";
int a = stoi(s, 0, 2);
to_string(a)
4 queue&stack
4.1 头文件
#include<queue>
#include<stack>
4.2 创建
queue<int> q;
stack<int> s;
4.3 常用方法
a.size();
a.empty();
a.push();
a.pop();
s.top();
q.front();
q.back();
5 priority_queue
可以理解为二叉堆,很实用!
5.1 头文件
#include<queue>
5.2 创建
priority_queue<int> q;
struct cmp{
bool operator()(int a, int b)const{
return a>b;
}
};
priority_queue<int, vector<int>, cmp>;
struct node{
int x, y;
bool operator<(const node& n)const{
return x>n.x;
}
};
priority_queue<node> q;
5.3 常用方法
q.size();
q.empty();
q.push();
q.pop();
q.top();
6 deque
6.1 头文件
#include<deque>
6.2 创建
deque<int> dq;
6.3 常用方法
dq.size();
dq.empty();
dq.clear();
dq.front();
dq.back();
dq.push_back();
dq.pop_back();
dq.push_front();
dq.pop_front();
7 set
类似数学中的集合
7.1 头文件
#include<set>
7.2 创建
set<int> s;
7.3 常用方法
s.size();
s.empty();
s.clear();
s.insert();
s.find();
s.count();
s.erase(x);
s.erase(s.begin(),s.end());
8 unordered_map
需要支持C++11(没有C++11,用hash_map也行)
8.1 头文件
#include <unordered_map>
8.2 创建
unordered_map<string, double> t;
8.3 常用方法
t["July"] = 7;
t.count("July") != 0;
t.find("July") != t.end();
9 algorithm
9.1 sort
默认升序排序
struct NODE{
int x, y;
bool operator<(const NODE& n)const{
if(x==n.x) y<n.y;
return x<n.x;
}
}node[maxn];
sort(node, node+maxn)
struct NODE{
int x, y;
}node[maxn];
bool cmp(NODE a, NODE b){
if(a.x==b.x) a.y<b.y;
return a.x<b.x;
}
sort(node, node+maxn, cmp);
9.2 unique
int a[10] = {1, 2, 2, 1, 3, 5, 5, 9, 9, 0};
int n = unique(a, a+10)-a;
for(int i=0;i<n;i++) cout<<a[i]<<' ';
9.3 lower_bound
功能:返回指向第一个值不小于val 的位置(一般情况下需要保证数组有序)。
template <class ForwardIterator, class T>
ForwardIterator lower_bound (ForwardIterator first, ForwardIterator last, const T& val);
template <class ForwardIterator, class T, class Compare>
ForwardIterator lower_bound (ForwardIterator first, ForwardIterator last, const T& val, Compare comp);
sort +unique +lower_bound 可以实现离散化,代码如下:
int a[7] = {12313987, 5723891, 471823956, 12313987, 75698634, 2141749, 471823956};
int b[7];
memcpy(b, a, sizeof(a));
sort(b, b+7);
int n = unique(b, b+7)-b;
for(int i=0;i<7;i++){
a[i] = lower_bound(b, b+n, a[i])-b;
cout<<a[i]<<' ';
}
9.4 __gcd
int n=35, m=45;
int k = __gcd(n, m);
cout<<k<<'\n';
cout<<n/k*m;
10 杂项
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
|