【发布时间】:2011-02-26 13:33:32
【问题描述】:
是否有标准函数返回值数组的最大元素的位置(不是值)?
例如:
假设我有一个这样的数组:
sampleArray = [1, 5, 2, 9, 4, 6, 3]
我想要一个返回整数 3 的函数,告诉我sampleArray[3] 是数组中的最大值。
【问题讨论】:
是否有标准函数返回值数组的最大元素的位置(不是值)?
例如:
假设我有一个这样的数组:
sampleArray = [1, 5, 2, 9, 4, 6, 3]
我想要一个返回整数 3 的函数,告诉我sampleArray[3] 是数组中的最大值。
【问题讨论】:
std::max_element 采用两个迭代器来界定一个序列,并返回一个指向该序列中最大元素的迭代器。您还可以将谓词传递给定义元素顺序的函数。
【讨论】:
在 STL 中,std::max_element 提供了迭代器(如果你真的想要的话,可以使用它来获取 std::distance 的索引)。
int main(int argc, char** argv) {
int A[4] = {0, 2, 3, 1};
const int N = sizeof(A) / sizeof(int);
cout << "Index of max element: "
<< distance(A, max_element(A, A + N))
<< endl;
return 0;
}
【讨论】:
RandomAccessIterator,在这种情况下它是时间常数。无论如何,优化都是在内部为您完成的。
STL 有一个 max_elements 函数。 这是一个例子:http://www.cplusplus.com/reference/algorithm/max_element/
【讨论】:
您可以使用max_element()函数查找最大元素的位置。
int main()
{
int num, arr[10];
int x, y, a, b;
cin >> num;
for (int i = 0; i < num; i++)
{
cin >> arr[i];
}
cout << "Max element Index: " << max_element(arr, arr + num) - arr;
return 0;
}
【讨论】:
或者,写成一行:
std::cout << std::distance(sampleArray.begin(),std::max_element(sampleArray.begin(), sampleArray.end()));
【讨论】: