Перейти к содержанию

Как найти индекс элемента в векторе на C++

Индекс элемента в векторе на C++ получают вычитанием итератора начала из итератора, который вернул поиск.

ИнформатикаОбновлено 9 сентября 2026 г.3 мин чтения

Как найти индекс элемента в векторе на C++?

Нейросова

Как найти индекс элемента в векторе на C++: вызывают auto it = std::find(v.begin(), v.end(), value) из заголовка <algorithm>, а сам индекс получают вычитанием it - v.begin(). Если элемент не найден, std::find возвращает v.end(), и вычитание даёт размер вектора. Для поиска по условию вместо точного значения используют std::find_if с лямбда-функцией, а для отсортированного вектора — std::lower_bound, который работает быстрее за счёт бинарного поиска.

Поиск числа 42 в векторе {10, 25, 7, 42, 7} даёт индекс 3, потому что отсчёт начинается с нуля
Позиция элемента считается от нуля

Разбор по случаям

Что известноФормулаКогда применять
нужен индекс первого элемента, равного заданному значениюauto it = std::find(v.begin(), v.end(), value); индекс = it - v.begin()вектор не отсортирован, ищут точное совпадение значения
нужен индекс элемента по условию, а не по точному значениюautoit=std::findif(v.begin(),v.end(),condition);индекс=it−v.begin()auto it = std::find_if(v.begin(), v.end(), condition); \text{индекс} = it - v.begin()ищут первый элемент, удовлетворяющий условию, например больше числа
вектор заранее отсортирован по возрастаниюautoit=std::lowerbound(v.begin(),v.end(),value);индекс=it−v.begin()auto it = std::lower_bound(v.begin(), v.end(), value); \text{индекс} = it - v.begin()нужен быстрый поиск за счёт бинарного алгоритма в большом векторе
нужны индексы всех вхождений элемента, а не только первогоцикл for с проверкой v[i] == value и сохранением подходящих i в отдельный векторэлемент встречается в векторе несколько раз подряд или вразброс

Примеры

Поиск точного значения. Дан вектор std::vector<int> v = {10, 25, 7, 42, 7}. Чтобы найти индекс числа 42, вызываем auto it = std::find(v.begin(), v.end(), 42), а сам индекс получаем как it - v.begin(). Число 42 стоит четвёртым по счёту, поэтому индекс равен 3, ведь нумерация элементов начинается с нуля.

Поиск по условию. Дан вектор std::vector<int> v = {5, 12, 30, 8, 45}. Нужен индекс первого элемента больше 20, поэтому используем std::find_if с условием: auto it = std::find_if(v.begin(), v.end(), [](int x){ return x > 20; }). Первым подходящим элементом оказывается число 30 на третьей позиции по счёту, значит индекс it - v.begin() равен 2, потому что отсчёт индексов в векторе всегда идёт с нуля.

Частые ошибки

  • Забывают, что std::find возвращает итератор, а не сам индекс, и используют его как число напрямую.
  • Путают отсчёт с единицы и с нуля, из-за чего индекс получается на единицу больше или меньше.
  • Не проверяют результат std::find на равенство v.end(), из-за чего программа падает при отсутствии элемента.

Коротко

Как найти индекс элемента в векторе на C++ — вызвать std::find или std::find_if и вычесть из полученного итератора v.begin(). Для отсортированного вектора быстрее работает std::lower_bound, а для поиска всех вхождений нужен обычный цикл по индексам.

Учебный бот Нейросовы

Бесплатный помощник по учёбе — не только по теме «Информатика». Решит задачу по действиям, объяснит непонятное место своими словами, ответит на вопросы в конце параграфа.

  • Любой учебный вопрос
  • Понимает фото задания
  • Без регистрации

Ещё по теме

А можно не писать самому