如何获得矢量中的最大值(或最小值)?
如何获取向量中的最大值(或最小值):C++?如何获得矢量中的最大值(或最小值)?
我已经看到了这对谷歌的几个解决方案,但没有人对我有意义:(
有人能在一个简单直接的方式小白如何从矢量获得最大或最小值,请解释一下吗? 和我是在错误的假设它会或多或少与数组一样吗?
我需要一个迭代器吧?我max_element
尝试过,但一直得到错误?
vector<int>::const_iterator it;
it = max_element(cloud.begin(), cloud.end());
错误:在“云”请求构件“开始”,其是非类类型“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(...)
如果你需要两者兼而有之:/
嗨,你知道是否可以将它应用于维数组或向量? – 2014-08-13 21:58:45
是的,你可以。标准库算法已经被设计为通常在迭代器上工作。指针也是迭代器。 – sehe 2014-08-14 09:48:58
假设云是int cloud[10]
你可以做这样的: int *p = max_element(cloud, cloud + 10);
也会试试这个。我早些时候尝试过得到max_element,但没有爱。谢谢! – 2012-03-26 15:44:29
如果你想使用一个迭代器,你可以做一个投放新与阵列。
std::array<int, 10> icloud = new (cloud) std::array<int,10>;
注意最后缺少()
,这很重要。这会创建一个使用该内存作为存储的数组类,并具有迭代器之类的STL特性。
(这是C++ TR1/C++ 11的方式)
#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
这回答了如何在数组中找到最大值的问题,而不是C++“vector”。 – 2014-08-04 16:18:31
这个问题被标记为C++。你已经用C编写了这个代码,但不仅如此,你正在将一个向量等同于一个数组 - 不正确。当我们只需要实际值时,您也有不必要的打印语句。最后,整个代码让人分心。你只需要'for'循环中的代码。总体而言,答案非常糟糕。 – rayryeng 2017-10-19 09:04:50
在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;
}
由于你引用了C++ 11,所以比使用'std :: max_element'更好,因为......? – rayryeng 2017-10-19 07:13:34
如果你想使用的功能std::max_element()
,你必须做的方式是:
double max = *max_element(vector.begin(), vector.end());
cout<<"Max value: "<<max<<endl;
我希望这可以帮助。
为什么在'* max_element'中有**'* ** **? – Konrad 2017-01-08 16:05:16
这是因为'max_element'返回迭代器 – 2017-01-09 23:32:08
您可以使用max_element获取向量中的最大值。 max_element将迭代器返回到范围中的最大值,如果范围为空,则返回最后一个值。作为一个迭代器就像指针(或者你可以说指针是一个迭代器的形式),你可以在它之前使用*来获取值。 所以按这个问题,你可以在一个矢量得到最大的元素:
int max=*max_element(cloud.begin(), cloud.end());
它会给你在你的载体“云”的最大元素。 希望它有帮助。
您可以使用max_element/min_element函数直接打印它。 如:
cout<<*max_element(v.begin(),v.end());
cout<<*min_element(v.begin(),v.end());
令,
#include<vector>
vector<int>v{1,2,3,-1,-2,-3};
如果向量按升序或降序排序,那么你可以用复杂度为O(1)找到它。
对于向上升序的向量,第一个元素是最小的元素,可以通过v [0](基于0的索引)得到它,最后一个元素是最大的元素,可以通过v [sizeOfVector-1 ]。
如果向量按降序排列,那么最后一个元素是最小的元素,您可以通过v [sizeOfVector-1]得到它,第一个元素是最大的元素,您可以通过v [0]得到它。
如果向量没有排序,那么你必须遍历向量来获得最小/最大的元素。在这种情况下,时间复杂度是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;
}
}
可以在输入部分计算它(当你从一个给定的矢量找到最小的或最大的元素)
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());
通过使用此功能,您可以获得任何范围的最小/最大元素。如,
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++中。
'min_element'和'max_element'返回**迭代器**,而不是指针。但是,从技术上讲,指针是迭代器的一个子集。请参阅:https://*.com/questions/2728190/how-are-iterators-and-pointers-related – rayryeng 2017-10-19 07:14:32
我已更新我的答案。感谢您的观察。 – 2017-10-19 10:15:44
看起来'云'不是STL容器,而是'int [10]'。基本上,'cloud'没有'.begin()'成员。可能希望得到一本基本的C++书籍,除非你只做这件事。 – 2012-03-26 15:20:31
其他一些代码也可能有用。云的定义在哪里? – Tim 2012-03-26 15:26:15
云是一个矢量 – 2012-03-26 15:44:04