Sobes.tech
Назад к вопросам
Junior — Middle
82

Объясните предназначение и основные особенности std::span в C++.

Компании, где спрашивали
Astra

Ответ от нейросети

sobes.tech AI

std::span в C++ — это лёгкий объект-обёртка, который предоставляет непрерывный доступ к последовательности элементов (например, массиву или вектору) без владения ими.

Основные особенности:

  • Не владеет памятью, а лишь ссылается на существующий блок данных.
  • Позволяет безопасно передавать массивы и срезы без копирования.
  • Поддерживает размер и указатель на данные.
  • Совместим с любыми контейнерами, предоставляющими непрерывную память.

Пример использования:

#include <span>
#include <vector>
#include <iostream>

void printSpan(std::span<int> s) {
    for (int v : s) {
        std::cout << v << ' ';
    }
    std::cout << '\n';
}

int main() {
    std::vector<int> vec = {1, 2, 3, 4};
    int arr[] = {5, 6, 7, 8};

    printSpan(vec);       // передаём вектор
    printSpan(arr);       // передаём массив
    printSpan({arr, 3});  // передаём срез массива
}

std::span удобен для функций, которым нужно работать с последовательностями данных без копирования и без привязки к конкретному контейнеру.