c++ - 如何找到 vector 中的最大元素 (C++)?

标签 c++ algorithm vector iterator max

这是我的代码。我省略了 vector 的代码,因为它不重要。

#include <string>
#include <iostream>
#include <vector>
using namespace std;


int main() {
    vector<int> scores;

    // code to make vector

    cout << "High score: " << scores[std::max(scores.begin(), scores.end())] << endl;
    system("pause");
}

我的理解是 std::max 返回一个迭代器,但我真的不知道如何处理迭代器。我看过这个例子

*max(scores.begin(), scores.end())

让它返回一个索引而不是一个迭代器,但是它得到了错误

Expression: vector iterator not dereferencable

我尝试使用迭代器,然后使用 std::distance

vector<int>::iterator high = std::max(scores.begin(), scores.end());
cout << "High score: " << scores[std::distance(scores.begin(), high)] << endl;

但是我得到了错误

Expression: vector subscript is out of range. 

解决这个问题的最佳方法是什么?

最佳答案

有一个名为std::max_element 的标准算法在 header 中声明 <algorithm>那就是你需要的。

例如

#include <algorithm>

//...

cout << "High score: " << *std::max_element( scores.begin(), scores.end() ) << endl;

假设 vector 不为空。

至于这个电话

std::max(scores.begin(), scores.end())

然后它返回这两个迭代器中的最大迭代器。以及end()对应的迭代器总是大于或等于(如果 vector 为空)对应于 begin() 的迭代器.

关于c++ - 如何找到 vector 中的最大元素 (C++)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32159151/

相关文章:

c++ - 从 C++ 中的两个相关 vector 进行随机选择的最快方法是什么?

c++ - 尝试在 vector 类中创建复制函数

函数参数上的 C++ 内存泄漏

c++ - 我如何从 boost::streambuf 读取指针数据但没有复制数据

c++ - 转换指向基类的指针列表

r - 从矩阵中提取总和最大的元素而不重复行或列的算法?

C:找到两个 3D vector 之间的角度

c++ - 在 C/C++ 中通过指针调用函数时,编译器如何正确处理 ABI?

javascript - 计算总页数的分页逻辑

language-agnostic - 在游戏中放置防御结构