c++ - 使用 std::min_element、std::max_element 查找 vector 中的最小和最大元素

标签 c++ stl

我是 C++ 的新手,我试图找到 std::vector 的最小和最大元素,但是 std::min_element()std::max_element() 没有一起工作。给定的输出只是最小值。在输出中,只有最小值被打印两次,而不是先最小值然后最大值。

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

bool comp1_(int a, int b) 
{ 
    return a > b; 
}

bool comp2(int a, int b) 
{ 
    return a < b; 
}

int main() 
{ 
    vector<int> myvector;
    vector<int>::iterator i1;
    vector<int>::iterator i2;
    int n, num;
    cin >> n;
    for(int i = 0; i < n; i++){
        cin >> num;
        myvector.push_back(num);
    }
    i2 = std::min_element(myvector.begin(), myvector.end(), comp2);
    cout << *i2 << " ";
    i1 = std::max_element(myvector.begin(), myvector.end(), comp1_); 
    cout << *i1; 
    return 0; 
} 

最佳答案

您的问题只是您错误地使用了max_element。如果第一个参数小于第二个参数,它需要一个返回 true 的比较。在这两种情况下,您都需要使用 comp2_。所以在你的程序中它应该是

i1 = std::max_element(myvector.begin(), myvector.end(), comp2); 

实现你想要的东西的最佳实践是像 Jesper 提到的那样使用 minmax_element

#include <iostream> 
#include <algorithm> 
#include <vector>


bool compLess(int a, int b)
{
    return (a < b);
}

int main()
{
    using namespace std;
    vector<int> myvector;

    int n, num;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> num;
        myvector.push_back(num);
    }

    auto minmax = std::minmax_element(myvector.begin(), myvector.end(), compLess);
    cout << "min: " << *minmax.first << "\tmax:" << *minmax.second << "\n";
    return 0;
}

有了这个,您就不必遍历数组两次。

提示 不要在全局命名空间中使用using namespace std;。我认为这是不好的做法。

关于c++ - 使用 std::min_element、std::max_element 查找 vector 中的最小和最大元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52357634/

相关文章:

c++ - 需要访问类私有(private)成员的比较器

c++ - 未在范围内声明 - priority_queue C++ 的友元比较器类

c++ - 动态创建继承类,使用 std::map 使用基类指针访问?

c++ - 为什么只有非常量映射提供类似关联数组的直接元素检索?

c++ - 考虑多种情​​况,在 C++ 中解析英国用户的全名

c++ - 为什么我的列表上的迭代失败?

c++ - 是否可以从模板参数中提取数组大小?

c++ - c++20 [[no_unique_address]] 中的新特性是什么?

c++ - 船长原型(prototype) : Piecewise write large message to disk

c++ - 带有移动迭代器的独特算法