Класс span
Класс span представляет собой невладеющее представление непрерывной последовательности объектов.
Он позволяет ссылаться на участок памяти, принадлежащий другому контейнеру (например, вектору или массиву),
без владения этими данными и без их копирования. В первом параметре шаблона указывается тип элементов,
во втором (необязательном) - размер последовательности (динамический или фиксированный).
Синтаксис
#include <span>
std::span<Type, Extent> span_name;
Пример
Давайте создадим span из вектора целых чисел и выведем его элементы:
#include <iostream>
#include <vector>
#include <span>
using namespace std;
int main()
{
vector<int> vec = {1, 2, 3, 4, 5};
span<int> sp(vec);
for (int elem : sp) {
cout << elem << " ";
}
cout << endl;
return 0;
}
Результат выполнения кода:
1 2 3 4 5
Пример
Давайте создадим span из массива строк и получим доступ к его элементам по индексу:
#include <iostream>
#include <span>
using namespace std;
int main()
{
string arr[] = {"abcde", "12345"};
span<string> sp(arr);
cout << sp[0] << endl;
cout << sp[1] << endl;
cout << sp.size() << endl;
return 0;
}
Результат выполнения кода:
"abcde"
12345
2
Пример
Давайте создадим span с фиксированным размером и проверим его длину:
#include <iostream>
#include <vector>
#include <span>
using namespace std;
int main()
{
vector<int> vec = {1, 2, 3, 4, 5};
span<int, 5> sp(vec);
cout << sp.size() << endl;
cout << sp.front() << endl;
cout << sp.back() << endl;
return 0;
}
Результат выполнения кода:
5
1
5