Как получить максимальное (или минимальное) значение в векторе?
Как получить максимальное (или минимальное) значение в векторе в С++?
Я видел несколько решений для этого в Google, но ни один из них не имел для меня смысла: (
Может кто-нибудь объяснить простым простым способом noob, как получить максимальное или минимальное значение от вектора, пожалуйста?
и я ошибаюсь, если предположить, что он будет более или менее одинаковым с массивом?
Мне нужен итератор? Я пробовал его с помощью max_element
, но продолжал получать сообщение об ошибке?
vector<int>::const_iterator it;
it = max_element(cloud.begin(), cloud.end());
error: запрос для "begin in" в облаке, который относится к классу non-class int [10]
EDIT: Я не смог ответить на свой вопрос??? поэтому я поставлю его здесь...
Ничего себе, спасибо за быстрые ответы!
Я закончил тем, что делал это так, думаю, это нормально?
for (unsigned int i = 0; i < cdf.size(); i++)
if (cdf[i] < cdfMin)
cdfMin = cdf[i];
где cdf
- вектор.
Ответы
Ответ 1
С помощью флагов компиляции С++ 11/С++ 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; }
Посмотрите на live в 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 и используйте std::minmax_element(...)
, если вам нужно оба сразу:/
Ответ 2
Если вы хотите использовать функцию std::max_element()
, вам нужно выполнить следующие действия:
double max = *max_element(vector.begin(), vector.end());
cout<<"Max value: "<<max<<endl;
Надеюсь, это поможет.
Ответ 3
Предполагая облако int cloud[10]
, вы можете сделать это следующим образом:
int *p = max_element(cloud, cloud + 10);
Ответ 4
Позволять,
#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 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++.
Ответ 5
В С++ 11 вы можете использовать некоторую функцию:
int maxAt(std::vector<int>& vector_name) {
int max = INT_MIN;
for (auto val : vector_name) {
if (max < val) max = val;
}
return max;
}
Ответ 6
Вы можете распечатать его напрямую, используя функцию max_element/min_element.
Например:
cout<<*max_element(v.begin(),v.end());
cout<<*min_element(v.begin(),v.end());
Ответ 7
Если вы хотите использовать итератор, вы можете сделать размещение-новый с массивом.
std::array<int, 10> icloud = new (cloud) std::array<int,10>;
Обратите внимание на недостаток ()
в конце, что важно. Это создает класс массива, который использует эту память в качестве своего хранилища и имеет функции STL, такие как итераторы.
(Кстати, это С++ TR1/С++ 11)
Ответ 8
Вы можете использовать max_element для получения максимального значения в векторе.
Max_element возвращает итератор в наибольшее значение в диапазоне или последний, если диапазон пуст. Поскольку итератор похож на указатели (или вы можете сказать, что указатель - это форма итератора), вы можете использовать * перед этим, чтобы получить значение.
Таким образом, в соответствии с проблемой вы можете получить максимальный элемент в векторе как:
int max=*max_element(cloud.begin(), cloud.end());
Он даст вам максимальный элемент в вашем векторном "облаке".
Надеюсь, что это поможет.
Ответ 9
Просто это:
// 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));
Ответ 10
Мой способ найти максимальное или минимальное значение в векторе очень прост.
- Сначала я отсортирую вектор, используя sort() STL из C++.
- Тогда для значения min я возьму первый элемент отсортированного вектора.
- Тогда для максимального значения я возьму последнее значение отсортированного вектора.
Ниже приведен простой код
sort(myVector.begin(),myVector.end());
int minimunValue = myVector[0];
int maximumValue = myVector[myVector.size()-1];
cout<<minimunValue<<" "<<maximumValue<<endl;
Ответ 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 way... в C