一.STL
1.set
禁用:不可直接修改元素(常指针)
二分查找 : set s; auto t = s.lower_bound(x); //返回第一个大于等于x的指针(找不到这个点的话*t = 0)
指针移动访问前后元素: auto t = s.begin(); t ++; cout << *t;
2.map
访问前一个指针和后一个指针: auto it = map.find(i); auto pre = prev(it); auto ne = next(it);
(在维护区间时候有奇效)
map是按照key排序,而非value;
3.list
list可以在其头部和尾部添加值,也可以在头部和尾部删除值(是vector和deque的叠加版)
4.basic_string:
两边加元素: basic_string s; s = s + (int)x + s
二.匿名函数
所谓匿名函数,其实类似于python中的lambda函数,其实就是没有名字的函数。使用匿名函数,可以免去函数的声明和定义。这样匿名函数仅在调用函数的时候才会创建函数对象,而调用结束后立即释放,所以匿名函数比非匿名函数更节省空间
1.sort(代替cmp)
[] : 使用内部变量
vector<int> ans;
for(int i = 1; i <= 10; i ++ ) ans.push_back(i);
sort(ans.begin(), ans.end(), [](int i, int j){
return i > j;
});
2.dfs
[&] : 用到的任何外部变量都隐式按引用捕获
function<void(int)> dfs = [&](int u) {
...
};