一次遍历返回序列的最大值和次大值
启发3个数的比较,先比较2个数,分出大小,后将大值与第三个数进行比较,若第三个数大,则将大值赋给次大值,将第三个数赋给最大值,若第三个数小,则与次大值比较,若第三个数大则将第三个数赋给次大值,否则不变。
`/***************************************************************
File Name: find_max_premax_value.cpp
Author: tony
Mail: 445241843@qq.com
Created Time: 2016骞?8鏈?3鏃?鏄熸湡鍏?10鏃?6鍒?4绉? **************************************************************/`
#include<iostream>
#include<ctime>
#include<vector>
`using namespace std;
const int ARRAY_LENGTH = 20;
const int NUM_RANGE = 100;
template
vector& create_array(void);
template
bool find_max_premax_value(vector& arr, T & max, T & premax);
int main()
{
int max = 0, premax = 0;
vector arr = create_array();
for(auto x : arr)
cout << x << ‘ ’;
cout << endl;
if(find_max_premax_value(arr, max, premax))
cout << "max = " << max << " . premax = " << premax << endl;
}
template
vector& create_array(void)
{
vector arr;
srand(static_cast(time(0)));
for(int i = 0; i < ARRAY_LENGTH;++i)
{
arr.push_back(rand() % NUM_RANGE);
}
return arr;
}
template
bool find_max_premax_value(vector& arr, T & max, T & premax)
{
if(arr.size() >= 3)
{
if(arr[1] < arr[2])
{
max = arr[2];
premax = arr[1];
}
else
{
max = arr[1];
premax = arr[2];
}
for(int i = 3; i < arr.size(); ++i)
{
if(arr[i] > max)
{
premax = max;
max = arr[i];
}
else
{
if(arr[i] > premax)
premax = arr[i];
}
}
return true;
}
else
return false;
}
`
当你编译的时候会出现返回局部变量引用的警告,这里是没有问题的因为我将局部变量的引用赋值了变量,这是一个复制的过程,如果你将一个局部变量的引用返回给一个引用变量,那就会出现一些问题。这个问题会在下一篇博客中解答。
- 上一篇:没有了
- 下一篇: gcc编程出错警告汇总(持续更新)