- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我是 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/
我有以下内容 static const unsigned int chromosome = 6; double bestFitness[chromosomes]; for(int i = 0; i
int N = 6; vector > A(N, vector(3)); /* Do operation with A */ cout<<(*max_element(a.begin(),a.end()
假设我有一个 std::vector : std::vector v; [v is initialized] 我想得到 v 的最大元素。有一个算法可以做到这一点: int max_value = *s
我注意到 std::max_element 在整数上有一个奇怪的行为,它们相差不超过一个: #include #include #include int main() { std::ve
我有一个二维矩阵 double TotalEnergy[200][47]; 此矩阵填充有适当的值。现在我试图在每一列中找到最大值。 在这种情况下如何使用 std::max_element? 非常感谢。
STL 提供 std::max_element 来查找可迭代对象中的最大元素,例如像这样: std::vector::const_iterator max = std::max_element(o
我一直在看推力,我偶然发现了一个几乎(但不完全)回答我的问题:Finding the maximum element value AND its position using CUDA Thrust
我需要找到存储在我设备上的长数组中的最大元素。我想我可以使用 thrust::max_element 来做到这一点。我在下面代码的 while 循环中调用 thrust::max_element。我只
int array[] = {2, 3, 4, 6}; int array[6] = {2, 3, 4, 6}; int array[MAX_SIZE] = {2, 3, 4, 6}; 在第一个语句中
#include #include int main() { int a[3]={5,3,4}; std::cout并写 #include //... std::cout << *s
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我给这个代码片段输入 1 2 3 4 5 并不断得到 O 作为输出。我想要 5(最大元素)作为所需的输出。 int main() { int inp; std::vector A; for (int
所以根据这里的链接:http://www.cplusplus.com/reference/algorithm/max_element/ ,max_element 函数是 O(n),显然对于所有 STL
同样是O(n)复杂度,但是经过不严谨 测试,使用库函数的速度远超for循环的遍历找最值 ?
我正在了解 std::max_element .我写了下面的代码: auto e = std::max_element( std::begin(rtspUrls
有没有办法通过比较每 N 个元素来找到容器中的最大元素并返回索引。使用 STL、BOOST 或...其他库? 对于每个 N,我的意思是使用 std::max_element,但将 for 的增量从++
我有一个指向对象 QActionDonald 的指针 vector ,我试图找到包含最高 expectedvalue_ 的对象。我已经重载了 operator *actionList = qValu
我怎样才能得到堆栈的最大元素? STL 堆栈没有任何 begin() 或 end() 方法,我可以通过以下方法获得最大值: auto max = max_element(c.begin(), c.en
我正在尝试为 map 编写一个自定义 cmp 函数,这是一个对 map 的第二个元素进行比较的简单函数。我想将该函数用作模板,但我不知道如何将 map 的 .first 和 .second 类型传递给
如果没有元素大于某个值,有什么方法可以使 std::max_element 返回 end 迭代器? 假设我有这个 vector : std::vector vector{3, 6, 2, 5}; au
我是一名优秀的程序员,十分优秀!