В этом посте мы обсудим, как найти минимальное или максимальное значение в векторе на C++.
1. Использование std::max_element
The std::min_element
а также std::max_element
вернуть итератору минимальное и максимальное значение в указанном диапазоне соответственно. В следующем примере кода показан вызов обеих этих функций:
#include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> v = {2, 1, 3, 6, 7, 9, 8}; int max = *max_element(v.begin(), v.end()); int min = *min_element(v.begin(), v.end()); std::cout << min << «, « << max << std::endl; // 1, 9 return 0; } |
Скачать Выполнить код
Обе эти функции принимают бинарный предикат, который можно использовать для сравнения вектора объектов с использованием определенного поля, как показано ниже:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#include <iostream> #include <vector> #include <algorithm> struct Person { std::string name; int age; }; bool comp(Person const &lhs, Person const &rhs) { return lhs.age < rhs.age; } int main() { std::vector<Person> v = { {«A», 10}, {«B», 15}, {«C», 12}, {«D», 14} }; auto min = std::min_element(v.begin(), v.end(), comp); auto max = std::max_element(v.begin(), v.end(), comp); std::cout << «Minimum age object: (« << min->name << «, « << min->age << «)n»; std::cout << «Maximum age object: (« << max->name << «, « << max->age << «)n»; return 0; } |
Скачать Выполнить код
результат:
Minimum age object: (A, 10)
Maximum age object: (B, 15)
2. Использование std::minmax_element
Лучшим вариантом является использование std::minmax_element
функция для получения минимального и максимального количества элементов в контейнере. Он возвращает пару итераторов, первое и второе значения которых указывают на минимальный и максимальный элементы соответственно.
#include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> v = {2, 1, 3, 6, 7, 9, 8}; auto it = std::minmax_element(v.begin(), v.end()); int min = *it.first; int max = *it.second; std::cout << min << «, « << max << std::endl; // 1, 9 return 0; } |
Скачать Выполнить код
Чтобы получить индекс элементов с максимальным или минимальным значением, примените арифметику указателя или вызовите std::distance
функция.
#include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> v = {2, 1, 3, 6, 7, 9, 8}; auto it = std::minmax_element(v.begin(), v.end()); int min_idx = std::distance(v.begin(), it.first); int max_idx = std::distance(v.begin(), it.second); std::cout << min_idx << «, « << max_idx << std::endl; // 1, 5 return 0; } |
Скачать Выполнить код
3. Использование пользовательской процедуры
Наконец, мы можем написать вашу собственную процедуру, чтобы найти минимальное и максимальное значение в векторе. Вот как будет выглядеть код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#include <iostream> #include <vector> #include <climits> template<typename T> int findMaximum(std::vector<T> const &vec) { int max = INT_MIN; for (const T &i: vec) { if (max < i) { max = i; } } return max; } template<typename T> int findMinimum(std::vector<T> const &vec) { int min = INT_MAX; for (const T &i: vec) { if (min > i) { min = i; } } return min; } int main() { std::vector<int> v = {2, 1, 3, 6, 7, 9, 8}; int min = findMinimum(v); int max = findMaximum(v); std::cout << min << «, « << max << std::endl; // 1, 9 return 0; } |
Скачать Выполнить код
Это все о поиске минимального или максимального значения в векторе в C++.
Спасибо за чтение.
Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования.
Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования
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).
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].
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].
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.
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++.
Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article
Given a vector, find the minimum and maximum element of this vector using STL in C++. Example:
Input: {1, 45, 54, 71, 76, 12} Output: min = 1, max = 76 Input: {10, 7, 5, 4, 6, 12} Output: min = 1, max = 76
Approach:
- Min or Minimum element can be found with the help of *min_element() function provided in STL.
- Max or Maximum element can be found with the help of *max_element() function provided in STL.
Syntax:
*min_element (first_index, last_index); *max_element (first_index, last_index);
Below is the implementation of the above approach:
CPP
#include <bits/stdc++.h>
using
namespace
std;
int
main()
{
vector<
int
> a = { 1, 45, 54, 71, 76, 12 };
cout <<
"Vector: "
;
for
(
int
i = 0; i < a.size(); i++)
cout << a[i] <<
" "
;
cout << endl;
cout <<
"nMin Element = "
<< *min_element(a.begin(), a.end());
cout <<
"nMax Element = "
<< *max_element(a.begin(), a.end());
return
0;
}
Output:
Vector: 1 45 54 71 76 12 Min Element = 1 Max Element = 76
Time Complexity: O(N)
Auxiliary Space: O(1)
Last Updated :
07 Jul, 2022
Like Article
Save Article
Romiys 4 / 4 / 0 Регистрация: 27.12.2010 Сообщений: 56 |
||||
1 |
||||
Наибольший элемент вектора21.04.2011, 17:16. Показов 27785. Ответов 12 Метки нет (Все метки)
Помогите, пожалуйста разобраться с ошибкой. Прога-ма запрашивает числа, записывает в вектор, находит самое большое число и выводит его на екран.
0 |
600 / 568 / 104 Регистрация: 07.11.2010 Сообщений: 2,004 |
|
21.04.2011, 17:17 |
2 |
что пишет компилятор?
1 |
neske 1552 / 918 / 193 Регистрация: 26.03.2010 Сообщений: 3,105 |
||||
21.04.2011, 17:26 |
3 |
|||
Господи, зачем же так извращаться.
А тут, сама реализация алгоритма есть: http://www.cplusplus.com/refer… x_element/
1 |
4 / 4 / 0 Регистрация: 27.12.2010 Сообщений: 56 |
|
21.04.2011, 17:31 [ТС] |
4 |
Я пропустил команду cout, когда перемещал код в сообщение форума. Компилятор ошибок не выдаёт. Программа компилируется и работает, но неверно. Она выдаёт не самый большой элемент из вектора, а кокой-нибудь другой. Логическую ошибку обнаружить не могу, вроде всё очень просто и правильно.
0 |
600 / 568 / 104 Регистрация: 07.11.2010 Сообщений: 2,004 |
|
21.04.2011, 17:38 |
5 |
ответ написан выше, используйте STL с умом
0 |
4 / 4 / 0 Регистрация: 27.12.2010 Сообщений: 56 |
|
21.04.2011, 17:48 [ТС] |
6 |
При написании этой прог-мы я использовал те знания, которые имею на данный момент. До STL ещё не дошёл. Учу всё сам. И не понимаю почему нельзя правильно написать такую лёгкую программу используя только 1 цикл и условный оператор сравнения. Пока не выучу весь учебник + STL, про-гу написать невозможно?
0 |
600 / 568 / 104 Регистрация: 07.11.2010 Сообщений: 2,004 |
|
21.04.2011, 17:54 |
7 |
создайте обычный массив и пишите, в чем сложность? если уж взялись за использование std::vector то воспользуйтесь STL. Зачем учить STL? откройте мануал по готовым функция и пользуйтесь, что мешает?
1 |
prazuber 114 / 114 / 13 Регистрация: 29.04.2010 Сообщений: 240 |
||||||||
21.04.2011, 17:58 |
8 |
|||||||
Ну учится человек, что вы так взъелись на него. Romiys, у вас проверка неправильная. Правильно так:
Или даже так:
3 |
Romiys 4 / 4 / 0 Регистрация: 27.12.2010 Сообщений: 56 |
||||
21.04.2011, 18:11 [ТС] |
9 |
|||
Извиняюсь за глупый вопрос новичка, но что значит «мануал»? Названия функций вектора и их описания беру из учебников для новичков. Что есть — тем и работаю. «Мануал» — типа справки гдеть в компиляторе? Добавлено через 10 минут
0 |
4 / 4 / 0 Регистрация: 27.12.2010 Сообщений: 56 |
|
21.04.2011, 18:43 [ТС] |
10 |
Всем спасибо за помощь и участие. Ошибку нашёл. Успехов в работе!
2 |
11 / 10 / 5 Регистрация: 25.07.2020 Сообщений: 302 |
|
17.08.2020, 01:26 |
11 |
neske, а зачем ставится ‘*’ я просто не понимаю етого
0 |
1174 / 835 / 359 Регистрация: 26.02.2015 Сообщений: 3,743 |
|
17.08.2020, 01:49 |
12 |
Чтобы разыменовать итератор, который возвращает функция max_element.
0 |
653 / 466 / 183 Регистрация: 23.04.2019 Сообщений: 1,987 |
|
17.08.2020, 18:32 |
13 |
я просто не понимаю етого все когда-то не понимали, пока не начинали учить с/с++
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
17.08.2020, 18:32 |
Помогаю со студенческими работами здесь Матрица. Поменять наибольший элемент и диагональный элемент Дана целочисленная квадратная матрица. Найти в каждой строке… Задана вещественная матрица размером m×n. Найти наибольший элемент. Перестановкой строк и столбцов, добиться того, чтобы данный элемент оказался в вер Из суммы положительных элементов вектора вычесть сумму отрицательных, найти наибольший элемент вектора Найти наибольший элемент вектора, кратный трём и равный своему номеру, и его номер Заменить максимальный элемент изначального вектора на первый минимальный элемент изначального вектора Заменить элементы вектора, равные максимальному, на последний элемент вектора Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 13 |
Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article
Given a vector, find the maximum element of this vector using STL in C++. Example:
Input: {1, 45, 54, 71, 76, 12} Output: 76 Input: {1, 7, 5, 4, 6, 12} Output: 12
Recommended: Please try your approach on {IDE} first, before moving on to the solution.
Approach: Max or Maximum element can be found with the help of *max_element() function provided in STL.
Syntax:
*max_element (first_index, last_index);
CPP
#include <bits/stdc++.h>
using
namespace
std;
int
main()
{
vector<
int
> a = { 1, 45, 54, 71, 76, 12 };
cout << "Vector: ";
for
(
int
i = 0; i < a.size(); i++)
cout << a[i] << " ";
cout << endl;
cout << "nMax Element = "
<< *max_element(a.begin(), a.end());
return
0;
}
Output:
Vector: 1 45 54 71 76 12 Max Element = 76
Time Complexity: O(N), where N is number of elements in the given range of the vector.
Auxiliary Space: O(1)
Last Updated :
23 Jan, 2023
Like Article
Save Article