Mediumspanc++20
Что такое std::span и зачем?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
std::span<T> (C++20) — не владеющий view на contiguous sequence (ptr + size), аналог string_view для любого типа. Принимает C-array, std::array, std::vector, std::string.
// Один интерфейс для всех contiguous контейнеров, без overhead
void process(std::span<int> data);
int arr[10];
std::vector<int> v;
std::array<int, 10> a;
process(arr); // все три работают
process(v);
process(a);
process(v.data(), 0); // ошибка компиляции — нет narrowing- overhead — 2 слова (ptr + size), нет аллокации;
subspan,first<N>,last<N>— как у string_view;span<T, N>— фиксированный compile-time размер.
Ограничения: только contiguous (не list/deque). Опасность: dangling — если исходный контейнер уничтожен, span висит. Лучше, чем T* + size в API.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.