Возвращайте индекс первого совпадения, а при отсутствии — std::nullopt. optional отличает найденный нулевой индекс от ситуации, когда элемента нет.
Поиск позиции элемента в std::vector с использованием std::optional
Возвращайте индекс первого совпадения, а при отсутствии — std::nullopt. optional отличает найденный нулевой индекс от ситуации, когда элемента нет.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо реализовать функцию, которая ищет индекс заданного числа в переданном векторе и возвращает его в виде std::optionalstd::size_t. Если элемент не найден, функция должна вернуть пустой optional.
std::optional<std::size_t> find_index_n(const std::vector<int>& arr, int value)
{
}
Ответ
Возвращайте индекс первого совпадения, а при отсутствии — std::nullopt. optional отличает найденный нулевой индекс от ситуации, когда элемента нет.
#include <optional>
#include <vector>
#include <cstddef>
std::optional<std::size_t> find_index_n(const std::vector<int>& arr, int value) {
for (std::size_t i = 0; i < arr.size(); ++i)
if (arr[i] == value) return i;
return std::nullopt;
}
Нужен C++17. Проверка if (index) у optional означает наличие результата, даже когда внутри хранится 0. Само значение читают через *index после такой проверки. Время O(n), память O(1).