C++ vector 数组转换、查找、最大最小值、排序、排行的几种用法
C++ vector中常用到排序、取最值,一些场景可能还会要计算某个元素的排行,以下就是一些实际例子,精简、有效。
【1】会涉及到数组转vector:
vector<int> v(arr, arr + N); // N为数组size,可用sizeof(arr)/sizeof(int) 计算。
【2】vector中 begin-end的两种用法:
v.begin(), v.end()
begin(v), end(v)
【3】正排序用到sort():
sort(v.begin(), v.end()); //默认是从小到大 //begin/end对调会失败
【4】逆排序可以调用 reverse辅助:
reverse(v.begin(), v.end()); //翻转//元素位置翻转
【5】查找指定元素的位置,如果已排序,则可以用来查找制定元素的排行:
int IDX = find(v.begin(), v.end(), int N) - v.begin();
输出结果直接见代码中注释部分。
#include <iostream>
#include <algorithm>//max_element(),min_element()
#include <vector>
using namespace std;void main()
{//max_element用于返回最大值的下标,//*max_element用来取最大值//【1.1 对数组的排序】int a[5] = { 2, 3, 5, 4, 5 };cout << "maxVal=" << (*max_element(a, a + 5)) << " maxLocal=" << max_element(a, a + 5) - a << endl;cout << "minVal=" << (*min_element(a, a + 5)) << " minLocal=" << min_element(a, a + 5) - a << "\n\n";
//cout:
maxVal = 5 maxLocal = 2
minVal = 2 minLocal = 0//【1.2 对vector的排序】 //不精简//建议用下边end的那个//通过数组a的地址初始化,注意地址是从0到5(左闭右开区间)vector<int> b(a, a + 5);cout << "maxVal=" << *max_element(b.begin(), b.end()) << " maxLocal=" << max_element(b.begin(), b.end()) - b.begin() << endl;cout << "minVal=" << *min_element(b.begin(), b.end()) << " minLocal=" << min_element(b.begin(), b.end()) - b.begin() << "\n\n";
//cout:
maxVal = 5 maxLocal = 2
minVal = 2 minLocal = 0//【】v.begin() / begin(v) 验证是一样的。okcout << "maxVal=" << *max_element(begin(b), end(b)) << " maxLocal=" << max_element(begin(b), end(b)) - begin(b) << endl;cout << "minVal=" << *min_element(begin(b), end(b)) << " minLocal=" << min_element(begin(b), end(b)) - begin(b) << "\n\n";
//cout:
maxVal = 5 maxLocal = 2
minVal = 2 minLocal = 0//【2 指定元素的排行】//自己实现,先排序,再用findvector<int> c{ 0,1,2,3,4,5,6,7,8,9 };sort(c.begin(), c.end()); //默认是从小到大 //begin/end对调会失败reverse(c.begin(), c.end()); //翻转后变为从大到小//int IDX = find(c.begin(), c.end(), 7) - c.begin(); //9是指定元素的值//cout << "指定元素的降序排行=" << IDX << endl;
//cout:
指定元素的降序排行=2 【注意是降序】}