[stl] [c++]
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
31
32
33
34
35
36
37
38
39
vector<int> a({1,2,3,4,5});动态数组
array.pop_back(); //删除向量的最后一个元素
array.push_back(a); //尾部插入数字a
array.insert(array.begin()+i,a); //在第i+1个元素前面插入a;
array.erase(array.begin()+2); //删除第3个元素
array.erase(array.begin()+i,array.end()+j); //删除区间[i,j-1],区间从0开始
array.clear();
array.back();//返回最后一个元素
array.front(); //返回第一个元素

reverse(a.begin().a.end()); 翻转 必须用迭代器 数组不用 注意是都是前闭后开 end()是back()的后一位

必须相同元素排一起才能去重 返回值是去重后元素的下一个位置
int m=unique(a,a+n)-a;
int n=unique(a.begin(),a.end())-a.begin(); 不同元素的数量 此时原数组也改变(其实是生成了新数组)
a.erase(unique(a.begin(),a.end()),a.end()); 相当于只留不同元素

random_shuffle(a.begin(),a.end()); 随机顺序

sort(a.begin(),a.end()); 从小到大排序

bool cmp(a,b)
{
return a<b; 如果符合返回true a排b前面
}
sort(a.begin(),a.end(),cmp);从大到小

lower_bound 查找大于等于x的第一个元素的下标 元素存放在1到n中
upper_bound 查找大于x的第一个元素的下标

对于数组
int *p = lower_bound(a, a + 5, 3); 从a数组中找到第一个不小于3的元素
int t = lower_bound(a, a + 5, 3)-a 减去数组第一位的地址 得到下标

神器
nth_element(数组名,数组名+第k小元素,数组名+元素个数)