Как найти минимальное вектор

How can I find the minimum value from a vector?

int main()
{
    int v[100] = { 5, 14, 2, 4, 6 };
    int n = 5;
    int mic = v[0];
enter code here
    for (int i=0; i < v[n]; i++)
    {
        if (v[i] < mic)
            mic = v[i];
    }
    cout< < mic;
}

But is not working, what can I do?

AustinWBryan's user avatar

AustinWBryan

3,2493 gold badges23 silver badges42 bronze badges

asked Oct 22, 2012 at 16:44

Cristi DroPs's user avatar

4

See std::min_element.

Examples:

std::min_element(vec.begin(), vec.end()); // STL containers.
std::min_element(v, v + n); // C style arrays where n is the number of elements.
std::min_element(std::begin(v), std::end(v)); // STL containers and C style arrays. 

Note that for the last option, it is better to apply the ‘std 2-step’ pattern so it works for user-defined types as well as standard library types:

using std::begin, std::end; // Enables argument-dependent lookup: https://en.cppreference.com/w/cpp/language/adl
std::min_element(begin(v), end(v));

Since C++20, we can also use ranges to avoid having to call begin/end manually:

std::ranges::min_element(v);

Ayxan Haqverdili's user avatar

answered Oct 22, 2012 at 16:48

zabulus's user avatar

zabuluszabulus

2,3533 gold badges15 silver badges27 bronze badges

7

You can always use the stl:

auto min_value = *std::min_element(v.begin(),v.end());

Humam Helfawi's user avatar

Humam Helfawi

19.4k14 gold badges80 silver badges159 bronze badges

answered Oct 22, 2012 at 16:58

acrube's user avatar

acrubeacrube

7711 gold badge5 silver badges5 bronze badges

1

#include <iostream>
#include <vector>
#include <algorithm> // std::min_element
#include <iterator>  // std::begin, std::end

int main() {
    std::vector<int> v = {5,14,2,4,6};
    auto result = std::min_element(std::begin(v), std::end(v));
    if (std::end(v)!=result)
        std::cout << *result << 'n';
}

The program you show has a few problems, the primary culprit being the for condition: i<v[n]. You initialize the array, setting the first 5 elements to various values and the rest to zero. n is set to the number of elements you explicitly initialized so v[n] is the first element that was implicitly initialized to zero. Therefore the loop condition is false the first time around and the loop does not run at all; your code simply prints out the first element.

Some minor issues:

  • avoid raw arrays; they behave strangely and inconsistently (e.g., implicit conversion to pointer to the array’s first element, can’t be assigned, can’t be passed to/returned from functions by value)

  • avoid magic numbers. int v[100] is an invitation to a bug if you want your array to get input from somewhere and then try to handle more than 100 elements.

  • avoid using namespace std; It’s not a big deal in implementation files, although IMO it’s better to just get used to explicit qualification, but it can cause problems if you blindly use it everywhere because you’ll put it in header files and start causing unnecessary name conflicts.

answered Oct 22, 2012 at 16:48

bames53's user avatar

bames53bames53

85.5k15 gold badges177 silver badges243 bronze badges

2

You have an error in your code. This line:

for (int i = 0;i < v[n]; i++)

should be

for (int i = 0;i < n; i++)

because you want to search n places in your vector, not v[n] places (which wouldn’t mean anything)

AustinWBryan's user avatar

AustinWBryan

3,2493 gold badges23 silver badges42 bronze badges

answered Oct 22, 2012 at 16:49

alestanis's user avatar

alestanisalestanis

21.5k4 gold badges47 silver badges66 bronze badges

1

template <class ForwardIterator>
ForwardIterator min_element ( ForwardIterator first, ForwardIterator last )
{
    ForwardIterator lowest = first;
    if (first == last) 
        return last;

    while (++first != last)
    if (*first < *lowest) 
        lowest = first;
    return lowest;
}

AustinWBryan's user avatar

AustinWBryan

3,2493 gold badges23 silver badges42 bronze badges

answered Oct 22, 2012 at 17:26

lovaya's user avatar

lovayalovaya

4353 silver badges3 bronze badges

1

Try this with

 std::min_element(v.begin(),v.end())

answered Oct 22, 2012 at 16:49

Rahul Tripathi's user avatar

Rahul TripathiRahul Tripathi

167k31 gold badges277 silver badges330 bronze badges

#include <iostream>
int main()
{
    int v[100] = {5,14,2,4,6};
    int n = 5;
    int mic = v[0];
    for(int i = 0; i != n; ++i)
    {
        if(v[i] < mic)
        mic = v[i];
    }
    std:cout << mic << std::endl;;
}

answered Oct 22, 2012 at 17:30

lovaya's user avatar

lovayalovaya

4353 silver badges3 bronze badges

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

Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования :)

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

    Example

    To find the largest or smallest element stored in a vector, you can use the methods std::max_element and std::min_element, respectively. These methods are defined in <algorithm> header. If several elements are equivalent to the greatest (smallest) element, the methods return the iterator to the first such element. Return v.end() for empty vectors.

    std::vector<int> v = {5, 2, 8, 10, 9}; 
    int maxElementIndex = std::max_element(v.begin(),v.end()) - v.begin();
    int maxElement = *std::max_element(v.begin(), v.end());
    
    int minElementIndex = std::min_element(v.begin(),v.end()) - v.begin();
    int minElement = *std::min_element(v.begin(), v.end());
    
    std::cout << "maxElementIndex:" << maxElementIndex << ", maxElement:" << maxElement << 'n';
    std::cout << "minElementIndex:" << minElementIndex << ", minElement:" << minElement << 'n';
    

    Output:

    maxElementIndex:3, maxElement:10
    minElementIndex:1, minElement:2

    C++11

    The minimum and maximum element in a vector can be retrieved at the same time by using the method std::minmax_element, which is also defined in <algorithm> header:

    std::vector<int> v = {5, 2, 8, 10, 9}; 
    auto minmax = std::minmax_element(v.begin(), v.end());
    
    std::cout << "minimum element: " << *minmax.first << 'n';
    std::cout << "maximum element: " << *minmax.second << 'n';
    

    Output:

    minimum element: 2
    maximum element: 10

    std::min_element

    Определено в заголовке <algorithm>
    (1)
    template< class ForwardIt > 
    ForwardIt min_element( ForwardIt first, ForwardIt last );
    (until C++17)
    template< class ForwardIt > 
    constexpr ForwardIt min_element( ForwardIt first, ForwardIt last );
    (since C++17)
    template< class ExecutionPolicy, class ForwardIt > 
    ForwardIt min_element( ExecutionPolicy&& policy, 
                           ForwardIt first, ForwardIt last );
    (2) (since C++17)
    (3)
    template< class ForwardIt, class Compare >
    ForwardIt min_element( ForwardIt first, ForwardIt last, Compare comp );
    (until C++17)
    template< class ForwardIt, class Compare >
    constexpr ForwardIt min_element( ForwardIt first, ForwardIt last, Compare comp );
    (since C++17)
    template< class ExecutionPolicy, class ForwardIt, class Compare >
    ForwardIt min_element( ExecutionPolicy&& policy, 
                           ForwardIt first, ForwardIt last, Compare comp );
    (4) (since C++17)

    Находит наименьший элемент в диапазоне [first, last) .

    1) Элементы сравниваются с использованием operator< .

    3) Элементы сравниваются с использованием заданной двоичной функции сравнения comp .

    Parameters

    first, last форвардные итераторы,определяющие диапазон для изучения
    policy политика выполнения для использования. См. Политику выполнения для деталей.
    comp функция сравнения объект (т.е. объект , который удовлетворяет требованиям сравнения ) , который возвращает true если является alessthan b.

    Подпись функции сравнения должна быть эквивалентна следующей:

    bool cmp(const Type1 &a, const Type2 &b);

    Хотя подпись не должна иметь const & , функция не должна изменять передаваемые ей объекты и должна иметь возможность принимать все значения типа (возможно, const) Type1 и Type2 независимо от категории значения (таким образом, Type1 & не допускается Кроме того, Type1 не является исключением, если для Type1 перемещение эквивалентно копии (начиная с C ++ 11)).
    Типы Type1 и Type2 должны быть такими, чтобы объект типа ForwardIt мог быть разыменован, а затем неявно преобразован в оба из них.

    Type requirements
    ForwardIt должен соответствовать требованиям LegacyForwardIterator .

    Return value

    Итератор для наименьшего элемента в диапазоне [first, last) . Если несколько элементов в диапазоне эквивалентны наименьшему элементу, возвращается итератор к первому такому элементу. Возвращает last если диапазон пуст.

    Complexity

    Ровно max(N-1,0) сравнений, где N = std::distance(first, last) .

    Exceptions

    Перегрузки с параметром шаблона с именем ExecutionPolicy сообщают об ошибках следующим образом:

    • Если выполнение функции, вызванной как часть алгоритма, вызывает исключение, и ExecutionPolicy является одной из стандартных политик , вызывается std::terminate . Для любого другого ExecutionPolicy поведение определяется реализацией.
    • Если алгоритму не удается выделить память, std::bad_alloc .

    Possible implementation

    First version
    template<class ForwardIt>
    ForwardIt min_element(ForwardIt first, ForwardIt last)
    {
        if (first == last) return last;
     
        ForwardIt smallest = first;
        ++first;
        for (; first != last; ++first) {
            if (*first < *smallest) {
                smallest = first;
            }
        }
        return smallest;
    }
    Second version
    template<class ForwardIt, class Compare>
    ForwardIt min_element(ForwardIt first, ForwardIt last, Compare comp)
    {
        if (first == last) return last;
     
        ForwardIt smallest = first;
        ++first;
        for (; first != last; ++first) {
            if (comp(*first, *smallest)) {
                smallest = first;
            }
        }
        return smallest;
    }

    Example

    #include <algorithm>
    #include <iostream>
    #include <vector>
     
    int main()
    {
        std::vector<int> v{3, 1, 4, 1, 5, 9};
     
        std::vector<int>::iterator result = std::min_element(v.begin(), v.end());
        std::cout << "min element at: " << std::distance(v.begin(), result);
    }

    Output:

    See also

    возвращает самый большой элемент в ассортименте
    (function template)

    (C++11)

    возвращает самые маленькие и большие элементы в диапазоне
    (function template)
    возвращает меньшее из заданных значений
    (function template)

    (C++20)

    возвращает наименьший элемент в диапазоне
    (niebloid)


    C++

    • std::merge

      Объединяет два отсортированных диапазона [first1,last1)и [first2,last2)в один,начинающийся с d_first.

    • std::min

      Возвращает меньшее из заданных значений.

    • std::minmax

      Возвращает наименьшее и наибольшее из заданных значений.

    • std::minmax_element

      Находит наименьший и наибольший диапазон элементов [first,last).

    Понравилась статья? Поделить с друзьями:
  • Как найти емкость проводника
  • Как найти своих фанов
  • Как найти моделей рунетки
  • Как найти идеальное имя
  • Fallout 2 как найти джонни