一.寻找最小值和最大值。
方法: 遍历一遍元素集合,获得最值。
最小值:
void findMin(const vector<int> &num, int &min)
{
min = num[0];
vector<int>::const_iterator iter;
/*常量引用使用 const_iterator; 非常量使用 iterator*/
for (iter = num.begin(); iter != num.end(); ++iter)
{
if (*iter < min)
min = *iter;
}
}
最大值:
void findMax(const vector<int> &num, int &max)
{
max = num[0];
vector<int>::const_iterator iter;
/*常量引用使用 const_iterator; 非常量使用 iterator*/
for (iter = num.begin() + 1; iter != num.end(); ++iter)
{
if (*iter > max)
max = *iter;
}
}
二.同时寻找最小值和最大值。
方法:
1.一般方法, 遍历元素分别与最小值和最大值比较。共需要比较2n-2次。
2.优化方法, 每次读入两个元素,先比较这两个元素的大小,然后把大的与最大值比较,
小的与最小值比较。
void findMinAndMax(const vector<int> &num, int &min, int &max)
{
if (num.size() == 1)
{
max = min = num[0];
}
else
{
num[0] >= num[1] ? max = num[0], min = num[1] :
max = num[1], min = num[0];
vector<int>::const_iterator iter;
for (iter = num.begin() + 1; iter + 1 != num.end(); ++iter)
{
if (*iter >= *(iter + 1))
{
if (*iter > max) max = *iter;
if (*(iter + 1) < min) min = *(iter + 1);
}
else
{
if (*(iter + 1) > max) max = *(iter + 1);
if (*iter < min) min = *iter;
}
}
}
}