Mediumspan

Чем std::span эффективнее указателя+длины?

1Постановка

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

2Решение

std::span<T> (C++20) — не владеющая ссылка на непрерывную последовательность (указатель + длина). Копируется за O(1), знает размер, поддерживает iterator/range-based for.

#include <span>

// Один интерфейс для любых contiguous-данных
void process(std::span<int> data) {
    for (int x : data) { /* ... */ }
    data.size();   // знает размер, можно bounds-check
}

std::vector<int> v{1,2,3};
int arr[5] = {1,2,3,4,5};
process(v);       // вектор
process(arr);     // C-массив
  • Заменяет пары (T*, size_t) в API — чище и безопаснее;
  • В отличие от vector: не владеет, не аллоцирует;
  • Опасности те же, что у string_view: dangling.

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

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

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