如何获得向量中的最大(或最小)值?

我怎样才能得到最大(或最小)的值在一个向量在C + +

我在Google上看到了一些这样的解决scheme,但没有一个对我有意义:(

有人可以用简单的noob方式解释如何从vector中获得最大值或最小值吗? 我是否错误地认为它会和数组差不多呢?

我需要一个迭代器吗? 我尝试了max_element但不断收到错误?

 vector<int>::const_iterator it; it = max_element(cloud.begin(), cloud.end()); 

错误:请求“云”中的成员“开始”,这是非类types“int [10]”

编辑:我无法回答我自己? 所以我把它放在这里

哇,谢谢你的回复! 我结束了这样做,认为它好吗?

 for (unsigned int i = 0; i < cdf.size(); i++) if (cdf[i] < cdfMin) cdfMin = cdf[i]; 

其中cdf是一个向量。

使用c ++ 11 / c ++ 0x编译标志,你可以

 auto it = max_element(std::begin(cloud), std::end(cloud)); // c++11 

否则,写你自己的:

 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; } 

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'; } 

噢,如果你需要同时使用std::minmax_element(...) :/

如果你想使用函数std::max_element() ,你必须这样做的方式是:

 double max = *max_element(vector.begin(), vector.end()); cout<<"Max value: "<<max<<endl; 

我希望这可以帮助。

假设云是int cloud[10]你可以这样做: int *p = max_element(cloud, cloud + 10);

在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; } 

如果你想使用一个迭代器,你可以做一个的数组。

 std::array<int, 10> icloud = new (cloud) std::array<int,10>; 

注意最后缺less一个() ,这很重要。 这将创build一个使用该内存作为存储的数组类,并具有迭代器之类的STL特性。

(顺便说一句,这是C ++ TR1 / C ++ 11)

您可以使用max_element获取向量中的最大值。 max_element返回一个迭代器到范围内的最大值,如果范围是空的,则返回最后一个值。 作为一个迭代器就像指针(或者你可以说指针是一个迭代器的forms),你可以在它之前使用*来获得值。 所以根据这个问题,你可以得到一个vector的最大元素为:

 int max=*max_element(cloud.begin(), cloud.end()); 

它会给你的vector“云”的最大元素。 希望能帮助到你。

让,

  #include<vector> vector<int>v{1,2,3,-1,-2,-3}; 

如果向量按升序或降序排列,则可以用复杂度O(1)find它。

对于一个升序vector,第一个元素是最小的元素,你可以通过v [0](0基础索引)得到它,最后一个元素是最大的元素,你可以通过v [sizeOfVector-1]得到它。

如果向量按降序排列,那么最后一个元素是最小的元素,你可以通过v [sizeOfVector-1]得到它,第一个元素是最大的元素,你可以通过v [0]得到它。

如果向量没有sorting,则必须遍历向量以获得最小/最大元素。在这种情况下,时间复杂度为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<sizeOfVector;i++) //start iterating from the second element { if(v[i]<smallest_element) { smallest_element=arr[i]; } if(v[i]>largest_element) { largest_element=v[i]; } } 

你可以使用迭代器,

 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; } } 

你可以在input部分计算它(当你必须从给定的vector中find最小或最大的元素)

 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); } 

你也可以通过内置函数获得最小/最大的元素

 #include<algorithm> int smallest_element = *min_element(v.begin(),v.end()); int largest_element = *max_element(v.begin(),v.end()); 

您可以使用此function获得任何范围的最小/最大元素。 如,

 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) 

我在min_element()/ max_element()函数之前使用了星号(*)。 因为他们都返回迭代器。 所有的代码都在c ++中。

您可以使用max_element / min_element函数直接打印它。 例如:

  cout<<*max_element(v.begin(),v.end()); cout<<*min_element(v.begin(),v.end()); 
 #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); } 

完成nooby的方式…在C