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小元素,数组名+元素个数)
|