常用数据结构
字符串操作
1 2 3 4 5 6 7 8
| string a="hello "; string b="world"; a.append(b);
a.substr(start_index, length);
|
调用快速排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| int n; int nums[128]; sort(nums, nums+n);
bool cmp(int x, int y){ return x<y; } sort(nums, nums+n, cmp);
struct st{ string name; bool operator< (const st &other) const{ return int(name[0])<int(other.name[0]); } }; st nums[128]; sort(nums, nums+n);
|
优先级队列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| #include<queue> #include<vector> #include<iostream> using namespace std;
struct pro{ int cost; int profit; pro(int c, int p):cost(c),profit(p){} }; struct cmp{ bool operator()(const pro &a, const pro &b) const{ return a.cost < b.cost; } };
priority_queue<pro, vector<pro>, cmp> cp;
int main(){ vector<vector<int>> nums; vector<int> next(size); auto cmp = [&](const int& u, const int& v) { return nums[u][next[u]] > nums[v][next[v]]; }; priority_queue<int, vector<int>, decltype(cmp)> que(cmp); }
|
在STL中默认使用()
进行比较的,默认使用less(即<
运算符),所以一般的排序之后,前面的元素小于后面的元素。但优先级队列中的源码虽然也使用的less,但最终得到的结果却是大根堆,这是因为优先级队列的队首指向最后,队尾指向开始。参考来源。闭包函数
输入输出
cin
和cout
输入输出加速
1 2 3
| ios_base::sync_with_stdio(false); cin.tie(0);
|
读取和输出数据
int |
%d |
scanf("%d", &n); |
long long |
%lld |
scanf("%lld", &n); |
float |
%f |
scanf("%f", &fl); |
float |
%f |
scanf("%f", &fl); |
double |
%lf |
scanf("%lf", &db); |
char |
%c |
scanf("%c", &c); |
char数组或者string |
%s |
scanf("%s", str); |
读取完整的一行(包括换行符) |
|
fgets(char *, int size, stdin); |
运算符
1 2 3
| int a=-1; int b = (unsigned int)a<<1;
|