поведение std :: vector и std :: min - PullRequest
12 голосов
/ 01 декабря 2011

Почему следующая программа не возвращает минимальное значение как 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

Ответы [ 2 ]

45 голосов
/ 01 декабря 2011

Вы можете попробовать это:

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

std::min

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

std::min_element

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

0 голосов
/ 01 декабря 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...