Подтвердить что ты не робот

Std::vector и поведение std:: min

Почему следующая программа не возвращает минимальное значение как 1.

#include <vector>
#include <algorithm>
#include <iostream>

int main ( int argc, char **argv) {
    std::vector<int> test;
    test.push_back(INT_MAX);
    test.push_back(1);

    int min = *(std::min(test.begin(), test.end()));

    std::cout << "Minimum = " << min << std::endl;
}

Он возвращает значения minimum как 2147483647

4b9b3361

Ответ 1

Вы можете попробовать следующее:

int min = *std::min_element(test.begin(), test.end());

std::min

Возвращает меньшее из двух аргументов Возвращает меньшее значение a и b. Если оба эквивалентны, возвращается a.

std::min_element

Возвращает итератор, указывающий на элемент с наименьшим значением в диапазоне [первый, последний]. Сравнение выполняется с использованием любого оператора < для первой версии, или для второго; Элемент является наименьшим, если ни один другой элемент не сравнивает его меньше (он может сравниться, хотя).

Ответ 2

Помните, что std::vector<T>::end() НЕ дает вам итератор последнему элементу. Он возвращает итератор, указывающий BEHIND на последний элемент.
Если вы хотите обратиться к первому и последнему элементу с логикой итератора, вам нужно использовать (test.begin(), test.end()-1).