您可以使用标准算法std::min_element
在标头中声明<algorithm>
找到总和最小的元素。例如
#include <algorithm>
int *min = std::min_element( playerSums, playerSums + 3 );
std::cout << playerNames[min - playerSums]
<< " had the lowest values and got the sum " << *min
<< std::endl;
可以使用标准函数编写相同的内容std::begin
, std::end
and std::distance
在标头中声明<iterator>
#include <algorithm>
#include <iterator>
int *min = std::min_element( std::begin( playerSums ), std::end( playerSums ) );
std::cout << playerNames[ std::distance( playerSums, min )]
<< " had the lowest values and got the sum " << *min
<< std::endl;
您可以编写类似于该算法的自己的函数,而不是使用该算法。例如
size_t min_sum( const int playerSums[], size_t n )
{
size_t min = 0;
for ( size_t i = 1; i < n; i++ )
{
if ( playerSums[min] < playerSums[i] ) min = i;
}
return min;
}
size_t min = min_sum( playerSums, sizeof( playerSums ) / sizeof( *playerSums ) );
std::cout << playerNames[min]
<< " had the lowest values and got the sum " << playerSums[min]
<< std::endl;
如果您需要跳过数组中等于零的元素,那么该函数将如下所示
size_t min_sum( const int playerSums[], size_t n )
{
size_t min = 0;
while ( min < n && playerSums[i] == 0 ) ++min;
for ( size_t i = min; i < n; i++ )
{
if ( playerSums[min] < playerSums[i] ) min = i;
}
return min;
}
size_t min = min_sum( playerSums, sizeof( playerSums ) / sizeof( *playerSums ) );
if ( min != sizeof( playerSums ) / sizeof( *playerSums ) )
{
std::cout << playerNames[min]
<< " had the lowest values and got the sum " << playerSums[min]
<< std::endl;
}