常用库函数:
1. reverse(a.begin(), a.end()) / reverse(a, a+n);
2. unique(a.begin(), a.end()) / unique(a, a+n); // 返回去重后的尾迭代器
3. random_shuffle // 随机打乱,用法和reverse相同
4. sort,stable_sort(归并)// 排序,用法和reverse相同
为struct重载小于号
struct vec{int id, x, y};
vector<vec> a;
bool operator<(const rec &a, const rec &b) {
return a.x < b.x || a.x == b.x && a.x < b.y
}
sort(a.begin(), a.end());
- lower_bound(a, a+n, x) / upper_bound(a, a+n, x) // 返回第一个不小于x/大于x的迭代器/下标,其中a-a+n之间部分应该是排好序的
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 21;
int main() {
vector<int> a = {5, 4, 2, 1};
cout << *lower_bound(a.begin(), a.end(), 3, greater<int>()) << endl; // => 2
// greater<int> for reverse order
return 0;
}
或者
lower_bound(s.begin() + l, s.end(), x, greater<int>()) - s.begin(); // 在s[l-n)上做lower_bound
- next_permutation(a, a+n) / prev_permutation(a, a+n) => bool // 对a-a+n中元素进行下一个置换