gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:28:23 25 4
gpt4 key购买 nike

我是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com