C++ 如何获得向量中的最大值(或最小值)?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/9874802/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How can I get the max (or min) value in a vector?
提问by bob blob
How can I get the max (or min) value in a vector in C++?
如何在C++中获得向量中的最大值(或最小值)?
I have seen a few solutions for this on Google but none of them made sense to me :(
我在谷歌上看到了一些解决方案,但对我来说都没有意义:(
Can someone explain in an easy straightforward noob way how to get the max or min value from a vector please? and am I wrong in assuming it would be more or less the same with an array?
有人可以用简单直接的菜鸟方式解释如何从向量中获取最大值或最小值吗?我是否错误地假设它与数组或多或少相同?
I need an iterator right? I tried it with max_element
but kept getting an error?
我需要一个迭代器对吗?我试过了,max_element
但一直出错?
vector<int>::const_iterator it;
it = max_element(cloud.begin(), cloud.end());
error: request for member ‘begin' in ‘cloud', which is of non-class type ‘int [10]'
错误:请求“云”中的成员“开始”,这是非类类型“int [10]”
EDIT:I was not able to answer my own ??? so I'll put it here...
编辑:我无法回答我自己的???所以我会把它放在这里......
Wow, thanks for the fast replies! I ended up doing it this way, do think its ok?
哇,谢谢你的快速回复!我最终这样做了,你觉得可以吗?
for (unsigned int i = 0; i < cdf.size(); i++)
if (cdf[i] < cdfMin)
cdfMin = cdf[i];
where cdf
is a vector.
哪里cdf
是向量。
回答by sehe
Using c++11/c++0x compile flags, you can
使用 c++11/c++0x 编译标志,您可以
auto it = max_element(std::begin(cloud), std::end(cloud)); // c++11
Otherwise, write your own:
否则,自己写:
template <typename T, size_t N> const T* mybegin(const T (&a)[N]) { return a; }
template <typename T, size_t N> const T* myend (const T (&a)[N]) { return a+N; }
See it live at http://ideone.com/aDkhW:
在http://ideone.com/aDkhW现场观看:
#include <iostream>
#include <algorithm>
template <typename T, size_t N> const T* mybegin(const T (&a)[N]) { return a; }
template <typename T, size_t N> const T* myend (const T (&a)[N]) { return a+N; }
int main()
{
const int cloud[] = { 1,2,3,4,-7,999,5,6 };
std::cout << *std::max_element(mybegin(cloud), myend(cloud)) << '\n';
std::cout << *std::min_element(mybegin(cloud), myend(cloud)) << '\n';
}
Oh, and use std::minmax_element(...)
if you need both at once :/
哦,如果您同时需要两者,请使用std::minmax_element(...)
:/
回答by Angie Quijano
If you want to use the function std::max_element()
, the way you have to do it is:
如果您想使用该功能std::max_element()
,您必须使用的方法是:
double max = *max_element(vector.begin(), vector.end());
cout<<"Max value: "<<max<<endl;
I hope this can help.
我希望这会有所帮助。
回答by Taohidul Islam
Let,
让,
#include <vector>
vector<int> v {1, 2, 3, -1, -2, -3};
If the vector is sorted in ascending or descending order then you can find it with complexity O(1).
如果向量按升序或降序排序,那么您可以找到复杂度为 O(1) 的向量。
For a vector of ascending order the first element is the smallest element, you can get it by v[0] (0 based indexing) and last element is the largest element, you can get it by v[sizeOfVector-1].
对于升序向量,第一个元素是最小元素,可以通过 v[0](基于 0 的索引)获得,最后一个元素是最大元素,可以通过 v[sizeOfVector-1] 获得。
If the vector is sorted in descending order then the last element is the smallest element,you can get it by v[sizeOfVector-1] and first element is the largest element, you can get it by v[0].
如果向量按降序排序,则最后一个元素是最小元素,可以通过 v[sizeOfVector-1] 获得,第一个元素是最大元素,可以通过 v[0] 获得。
If the vector is not sorted then you have to iterate over the vector to get the smallest/largest element.In this case time complexity is O(n), here n is the size of vector.
如果向量未排序,则必须遍历向量以获得最小/最大元素。在这种情况下,时间复杂度为 O(n),这里 n 是向量的大小。
int smallest_element = v[0]; //let, first element is the smallest one
int largest_element = v[0]; //also let, first element is the biggest one
for(int i = 1; i < v.size(); i++) //start iterating from the second element
{
if(v[i] < smallest_element)
{
smallest_element = v[i];
}
if(v[i] > largest_element)
{
largest_element = v[i];
}
}
You can use iterator,
您可以使用迭代器,
for (vector<int>:: iterator it = v.begin(); it != v.end(); it++)
{
if(*it < smallest_element) //used *it (with asterisk), because it's an iterator
{
smallest_element = *it;
}
if(*it > largest_element)
{
largest_element = *it;
}
}
You can calculate it in input section (when you have to find smallest or largest element from a given vector)
您可以在输入部分计算它(当您必须从给定向量中找到最小或最大元素时)
int smallest_element, largest_element, value;
vector <int> v;
int n;//n is the number of elements to enter
cin >> n;
for(int i = 0;i<n;i++)
{
cin>>value;
if(i==0)
{
smallest_element= value; //smallest_element=v[0];
largest_element= value; //also, largest_element = v[0]
}
if(value<smallest_element and i>0)
{
smallest_element = value;
}
if(value>largest_element and i>0)
{
largest_element = value;
}
v.push_back(value);
}
Also you can get smallest/largest element by built in functions
您也可以通过内置函数获得最小/最大元素
#include<algorithm>
int smallest_element = *min_element(v.begin(),v.end());
int largest_element = *max_element(v.begin(),v.end());
You can get smallest/largest element of any range by using this functions. such as,
您可以使用此函数获取任何范围的最小/最大元素。如,
vector<int> v {1,2,3,-1,-2,-3};
cout << *min_element(v.begin(), v.begin() + 3); //this will print 1,smallest element of first three elements
cout << *max_element(v.begin(), v.begin() + 3); //largest element of first three elements
cout << *min_element(v.begin() + 2, v.begin() + 5); // -2, smallest element between third and fifth element (inclusive)
cout << *max_element(v.begin() + 2, v.begin()+5); //largest element between third and first element (inclusive)
I have used asterisk (*), before min_element()/max_element() functions. Because both of them return iterator. All codes are in c++.
我在 min_element()/max_element() 函数之前使用了星号 (*)。因为它们都返回迭代器。所有代码都在 C++ 中。
回答by Asha
Assuming cloud is int cloud[10]
you can do it like this:
int *p = max_element(cloud, cloud + 10);
假设云是int cloud[10]
你可以这样做:
int *p = max_element(cloud, cloud + 10);
回答by Kishy Nivas
You can print it directly using max_element/min_element function. Eg:
您可以使用 max_element/min_element 函数直接打印它。例如:
cout<<*max_element(v.begin(),v.end());
cout<<*min_element(v.begin(),v.end());
回答by brenorodrigues
In c++11, you can use some function like that:
在 c++11 中,你可以使用这样的函数:
int maxAt(std::vector<int>& vector_name) {
int max = INT_MIN;
for (auto val : vector_name) {
if (max < val) max = val;
}
return max;
}
回答by Prashant Shubham
You can use max_element to get the maximum value in vector. The max_element returns an iterator to largest value in the range, or last if the range is empty. As an iterator is like pointers (or you can say pointer is a form of iterator), you can use a * before it to get the value. So as per the problem you can get the maximum element in an vector as:
您可以使用 max_element 获取向量中的最大值。max_element 将迭代器返回到范围中的最大值,如果范围为空,则返回 last。由于迭代器类似于指针(或者您可以说指针是迭代器的一种形式),您可以在它之前使用 * 来获取值。因此,根据问题,您可以获得向量中的最大元素:
int max=*max_element(cloud.begin(), cloud.end());
It will give you the maximum element in your vector "cloud". Hope it helps.
它将为您提供矢量“云”中的最大元素。希望能帮助到你。
回答by std''OrgnlDave
If you want to use an iterator, you can do a placement-newwith an array.
如果你想使用迭代器,你可以用一个数组来做一个新的放置。
std::array<int, 10> icloud = new (cloud) std::array<int,10>;
Note the lack of a ()
at the end, that is important. This creates an array class that uses that memory as its storage, and has STL features like iterators.
注意()
末尾缺少 a ,这很重要。这将创建一个数组类,该类使用该内存作为其存储,并具有迭代器等 STL 功能。
(This is C++ TR1/C++11 by the way)
(顺便说一下,这是C++ TR1/C++11)
回答by ivan.ukr
Just this:
只是这个:
// assuming "cloud" is:
// int cloud[10];
// or any other fixed size
#define countof(x) (sizeof(x)/sizeof((x)[0]))
int* pMax = std::max_element(cloud, cloud + countof(cloud));
回答by user3907370
#include <stdlib.h>
#include <stdio.h>
int main()
{
int vector[500];
vector[0] = 100;
vector[1] = 2;
vector[2] = 1239;
vector[3] = 5;
vector[4] = 10;
vector[5] = 1;
vector[6] = 123;
vector[7] = 1000;
vector[8] = 9;
vector[9] = 123;
vector[10] = 10;
int i = 0;
int winner = vector[0];
for(i=0;i < 10; i++)
{
printf("vector = %d \n", vector[i]);
if(winner > vector[i])
{
printf("winner was %d \n", winner);
winner = vector[i];
printf("but now is %d \n", winner);
}
}
printf("the minimu is %d", winner);
}
The complet nooby way... in C
完整的nooby方式......在C中