找到最大元素的位置

Fak*_*ken 68 c++ algorithm

是否有一个标准函数返回值数组的max元素的位置(而不是值)?

例如:

假设我有一个这样的数组:

sampleArray = [1, 5, 2, 9, 4, 6, 3]
Run Code Online (Sandbox Code Playgroud)

我想要一个返回3的整数的函数,它告诉我这sampleArray[3]是数组中最大的值.

Ste*_*hen 111

在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;
}
Run Code Online (Sandbox Code Playgroud)

  • 使用函数distance()的时间复杂度是多少? (3认同)

小智 19

或者,写在一行(这应该作为斯蒂芬答案的评论,但我的声誉是不够的):

std::cout << std::distance(sampleArray.begin(), std::max_element(sampleArray.begin(), sampleArray.end()))
Run Code Online (Sandbox Code Playgroud)

  • 这不适用于数组,问题建议将其作为要使用的通用结构,因为数组不是类类型,因此它们没有 .begin() 或 .end() 等成员函数。我认为如果您使用的编译器足够新,您可以使用 std::begin(sampleArray) 和 std::end(sampleArray) 而不是 sampleArray.begin() 和 sampleArray.end() 来调整您的代码,尽管我个人更喜欢接受的答案,因为无论使用哪个版本的 C++,它都会运行 (2认同)

ras*_*dcs 7

您可以使用该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;
}
Run Code Online (Sandbox Code Playgroud)