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()); //元素位置翻转。先用【3】sort,再用【4】reverse即可。
[另]或者直接用 sort(v.begin(),v.end(),[](const int &a,const int &b) ->bool{return a>b;}); 这一句即可从大到小。这句稍微拗口,用多熟悉了即可。
【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) 验证是一样的。ok
cout << "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 指定元素的排行】
//自己实现,先排序,再用find
vector<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 【注意是降序】
}