std::span — non-owning view over a contiguous sequence of elements.
1#include <span>23void process(std::span<int> data) {4 for (int& val : data) {5 val *= 2;6 }7}89int arr[] = {1, 2, 3, 4, 5};10std::vector<int> vec = {6, 7, 8, 9, 10};1112process(arr); // Works with C array13process(vec); // Works with vector1415// Subspan16std::span<int> s(arr);17auto sub = s.subspan(1, 3); // {2, 3, 4}18auto first3 = s.first(3); // {1, 2, 3}19auto last3 = s.last(3); // {3, 4, 5}2021// Check bounds22std::cout << s.size(); // 523std::cout << s.empty(); // false24std::cout << s.data(); // pointer to arr
Advantages over pointer+size: