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 подскажет развёрнутый ответ в реальном времени.