[英]Get std::min_element and std::max_element to return iterator to last value?
[英]finding the min and max element in vector using std::min_element, std::max_element
我是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);
達到最佳目標的最佳做法是使用minmax_element
例如Jesper所述
#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;
在全局名稱空間中。 我認為這是不好的做法。
i1 = std::max_element(myvector.begin(), myvector.end(), comp1_);
是錯的
i1 = std::max_element(myvector.begin(), myvector.end(), comp2);
會工作。
通過使用comp1_
與max_element
你實際上要求的最低元素,因為max_element發現元素x為其comp1_(X,Y)不是任何ÿ如此。
您實際上已經做了一個雙重否定,您已經切換到要求最大的元素,但同時也反轉了您切換到再次要求最小的比較函數。
使用min_element
和max_element
時應該做的是通過一個比較函數,該函數表示“小於”,然后這些函數將按照它們說的去做。
您現在可能意識到
i2 = std::min_element(myvector.begin(), myvector.end(), comp1_);
將為您提供最大的元素。
您還需要使用comp2來調用std :: max_element。 min_element和max_element的比較運算符相同。
或者,您也可以使用i1 = std::min_element(myvector.begin(), myvector.end(), comp1_);
另請查看https://en.cppreference.com/w/cpp/algorithm/max_element 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.