如何获取向量中的最大值或最小值
How can I get the maximum or minimum value in a vector?
如何获取C++向量中的最大值或最小值?
我假设它与数组或多或少相同是错误的吗?
我需要一个迭代器,对吧?我用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]’
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;
让我们,
#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 < 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];
}
}
您可以使用迭代器,
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++ 编写的。
max_element或min_element功能直接打印它。
例如:
cout << *max_element(v.begin(), v.end());
cout << *min_element(v.begin(), v.end());
假设云是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>;
请注意,最后缺少()
,这很重要。这将创建一个数组类,该数组类使用该内存作为其存储,并具有迭代器等 STL 功能。
(顺便说一下,这是C++ TR1/C++11(
max_element来获取 vector 中的最大值。max_element将迭代器返回到范围内的最大值,如果范围为空,则返回最后一个。由于迭代器类似于指针(或者你可以说指针是迭代器的一种形式(,你可以在它之前使用 * 来获取值。因此,根据问题,您可以获得向量中的最大元素为:
int max=*max_element(cloud.begin(), cloud.end());
它将为您提供矢量"云"中的最大元素。希望对您有所帮助。
代表作者回答
for (unsigned int i = 0; i < cdf.size(); i++)
if (cdf[i] < cdfMin)
cdfMin = cdf[i];
其中cdf
是向量。
只是这个:
// 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));
- 最大和最小 1 C++函数
- txt 文件中浮点数的最大和最小值
- 为什么我的C 代码无法计算整数的最大和最小值
- 函数读取最大和min int值,并用文本字符串返回
- 在C弦C 中收集最大和最小的数字
- 在数组C 中排序最大和最小的值
- 在数组中找到最大和最小的数字
- 查找序列中最大和最小的 2 个整数
- 在C++中使用 for 循环从用户输入中查找最大和最小整数
- 如何获得C 中向量复合物值的最大,最小和位置
- 我试图显示我输入的三个值中最大和最小的数量
- 给定有向图和商店位置,放置商店,使从任何城市到最近商店的最大距离最小化
- 我无法弄清楚如何在不使用 climits 的情况下计算最大和最小有符号数C++
- 使用 c++ 在值数组中查找最大利润(最大 - 最小值)
- 所有最接近的较小值
- 如何查找向量中元素的最大和最小索引
- C++数组从最大到最小的数字
- 程序可以在不使用数组的情况下找到5个数字中最大和最小的
- 如何用最少的比较得到3个值中的最大和最小值
- C++的平均、最大和最小赋值