Hardindex-sequence

Что такое std::index_sequence и для чего?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

`std::index_sequence<I...>` (C++14) — последовательность size_t, для распаковки tuple-like в variadic контекстах. std::make_index_sequence<N> создаёт index_sequence<0,1,...,N-1>.

// Распаковать tuple в аргументы функции
template<typename Tuple, typename F, std::size_t... I>
void apply_impl(Tuple&& t, F f, std::index_sequence<I...>) {
    f(std::get<I>(std::forward<Tuple>(t))...);  // 0,1,2,...
}

template<typename... Args, typename F>
void apply(std::tuple<Args...>& t, F f) {
    apply_impl(t, f, std::make_index_sequence<sizeof...(Args)>{});
}

Пак I... разворачивается в 0,1,2,..., вызывая get<I> для каждого элемента. С C++17 std::apply делает это автоматически, но index_sequence всё ещё нужен для своих задач (compile-time циклы, генерация lookup-таблиц).

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.