Как найти максимум вектора

В этом посте мы обсудим, как найти минимальное или максимальное значение в векторе на 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

  • Read
  • Discuss
  • 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

    Метки нет (Все метки)


    Студворк — интернет-сервис помощи студентам

    Помогите, пожалуйста разобраться с ошибкой. Прога-ма запрашивает числа, записывает в вектор, находит самое большое число и выводит его на екран.

    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    #include <iostream>
    #include <vector>
    using namespace std;
     
    int main()
    {
        
        vector<int>ivec2;
        int num, max=0;
        
     cout << "Enter numbers:"<<endl;
     
    while (cin>>num) 
     
        ivec2.push_back(num);
        
         for (vector<int>::size_type ip=0; ip!=ivec2.size()-1; ++ip)
            if (ivec2[ip]>ivec2[ip+1])
            max=ivec2[ip];  
             <<"The biggest element is : "<<max<< endl;
          system("pause");
        return 0;
    }



    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

    Господи, зачем же так извращаться.

    C++
    1
    
    std::cout << "Max: " << *std::max_element (vec.begin(), vec.end());

    А тут, сама реализация алгоритма есть: 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, у вас проверка неправильная. Правильно так:

    C++
    1
    2
    3
    
    for (vector<int>::size_type ip = 0; ip < ivec2.size(); ++ip)
      if (max < ivec2[ip])
        max = ivec2[ip];

    Или даже так:

    C++
    1
    2
    3
    
    for (vector<int>::iterator it = ivec2.begin(); it != ivec2.end(); ++it)
      if (max < *it)
        max = *it;



    3



    Romiys

    4 / 4 / 0

    Регистрация: 27.12.2010

    Сообщений: 56

    21.04.2011, 18:11

     [ТС]

    9

    Извиняюсь за глупый вопрос новичка, но что значит «мануал»? Названия функций вектора и их описания беру из учебников для новичков. Что есть — тем и работаю. «Мануал» — типа справки гдеть в компиляторе?

    Добавлено через 10 минут
    Спасибо всем за участие и внимание! Исправил прог-му , как Вы подсказали, на экран выводит, что наибольший элемент вектора 0?!

    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    #include <iostream>
    #include <vector>
    using namespace std;
     
    int main()
    {
     
    vector<int>ivec2;
    int num, max=0;
     
    cout << "Enter numbers:"<<endl;
     
    while (cin>>num)
     
    ivec2.push_back(num);
     
    for (vector<int>::size_type ip=0; ip<ivec2.size(); ++ip)
    if (max>ivec2[ip])
    max=ivec2[ip];
     
    cout<<"The biggest element is : "<<max<< endl;
    system("pause");
    return 0;
    }



    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

    Цитата
    Сообщение от Jorka
    Посмотреть сообщение

    я просто не понимаю етого

    все когда-то не понимали, пока не начинали учить с/с++
    Member access operators



    0



    IT_Exp

    Эксперт

    87844 / 49110 / 22898

    Регистрация: 17.06.2006

    Сообщений: 92,604

    17.08.2020, 18:32

    Помогаю со студенческими работами здесь

    Матрица. Поменять наибольший элемент и диагональный элемент
    Помогите пожалуйста ….

    Дана целочисленная квадратная матрица. Найти в каждой строке…

    Задана вещественная матрица размером m×n. Найти наибольший элемент. Перестановкой строк и столбцов, добиться того, чтобы данный элемент оказался в вер
    Задана вещественная матрица размером m×n. Найти наибольший элемент. Перестановкой строк и столбцов,…

    Из суммы положительных элементов вектора вычесть сумму отрицательных, найти наибольший элемент вектора
    Не знаю с чего начать решение задачи, плохо понимаю в программировании. Помогите пожалуйста решить…

    Найти наибольший элемент вектора, кратный трём и равный своему номеру, и его номер
    Задан вектор из N элементов. Найти наибольшее число и его координату среди кратных трем и…

    Заменить максимальный элемент изначального вектора на первый минимальный элемент изначального вектора
    Здравствуйте, помогите составить программу по обработке вектора в Mathcad 15.
    Необходимо вектор из…

    Заменить элементы вектора, равные максимальному, на последний элемент вектора
    Если в векторе максимальный элемент встречается больше одного раза, то заменить элементы, равные…

    Искать еще темы с ответами

    Или воспользуйтесь поиском по форуму:

    13

    Improve Article

    Save Article

    Like Article

  • Read
  • Discuss
  • 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

    Понравилась статья? Поделить с друзьями:
  • Как найти уровень занятости трудовых ресурсов
  • Как составить акт после эвакуации
  • Как найти пенсионный фонд в котором состоишь
  • Как правильно составить план действий для достижения цели
  • Как составить финансовый график платежей