Как получить индекс наименьшего элемента в векторе? - PullRequest
2 голосов
/ 22 марта 2019

Я хочу знать, какой элемент вектора является минимальным, но min_element возвращает итератор для элемента. Итак, я попробовал это:

vector<int> vec = {4,5,0,1,2,3} ;
int min_element_index = min_element(vec.begin(), vec.end()) - vec.begin();

Однако я не уверен, что это всегда будет работать. Я не знаю, как векторы хранятся в памяти, и я волнуюсь, что это сломается, когда я использую push_back.

Ответы [ 2 ]

10 голосов
/ 22 марта 2019

Вы также можете сделать это:

std::vector<int>::iterator it = std::min_element(std::begin(vec), std::end(vec));
std::cout << "index of smallest element: " << std::distance(std::begin(vec), it);

или даже проще:

auto it = std::min_element(std::begin(vec), std::end(vec));
std::cout << "index of smallest element: " << std::distance(std::begin(vec), it);

или

std::cout << "index of smallest element: " <<
std::distance(std::begin(v), std::min_element(std::begin(v), std::end(v)))
3 голосов
/ 22 марта 2019

Векторные члены гарантированно хранятся в смежной памяти, что на самом деле не имеет значения.

Векторные итераторы являются итераторами с произвольным доступом, поэтому вычитающие векторные итераторы хорошо определены (это всегда будет работать ссоответствует стандартам std::vector)

Чтобы преобразовать векторный итератор в указатель, вы можете сделать &*(vector-iterator), но здесь нет никаких причин.

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