std::span provides STL iterator interface for contiguous memory.
1#include <span>23std::vector<int> vec = {1, 2, 3, 4, 5};4std::span<int> s(vec);56// Iterator interface7auto it = s.begin();8std::cout << *it; // 19++it;10std::cout << *it; // 21112// Range-based for13for (int& x : s) {14 x *= 2;15}1617// STL algorithms18std::sort(s.begin(), s.end());19auto pos = std::find(s.begin(), s.end(), 3);20auto count = std::count_if(s.begin(), s.end(),21 [](int x) { return x > 2; });2223// Reverse iterators24for (auto rit = s.rbegin(); rit != s.rend(); ++rit) {25 std::cout << *rit << " ";26}2728// As contiguous range29static_assert(std::ranges::contiguous_range<std::span<int>>);30static_assert(std::ranges::sized_range<std::span<int>>);3132// Data access33int* data = s.data();34std::cout << s[0]; // Bounds-checked35std::cout << s.at(0); // Throws on out-of-bounds
Benefits: