The following code example is taken from the book
C++20 - The Complete Guide
by Nicolai M. Josuttis,
Leanpub, 2021
The code is licensed under a
Creative Commons Attribution 4.0 International License.
// raw code
#include <iostream>
#include <string>
#include <vector>
#include <ranges>
#include <algorithm>
#include <span>
template<typename T, std::size_t Sz>
void printSpan(std::span<T, Sz> sp)
{
for (const auto& elem : sp) {
std::cout << '"' << elem << "\" ";
}
std::cout << '\n';
}
int main()
{
std::vector<std::string> vec{"New York", "Tokyo", "Rio", "Berlin", "Sydney"};
// define view to first 3 elements:
std::span<const std::string, 3> sp3{vec.data(), 3};
std::cout << "first 3: ";
printSpan(sp3);
// sort referenced elements:
std::ranges::sort(vec);
std::cout << "first 3 after sort(): ";
printSpan(sp3);
// insert a new element:
// - must reassign the internal array of the vector if it reallocated new memory
auto oldCapa = vec.capacity();
vec.push_back("Cairo");
if (oldCapa != vec.capacity()) {
sp3 = std::span<std::string, 3>{vec.data(), 3};
}
std::cout << "first 3: ";
printSpan(sp3);
// let span refer to the last three elements:
sp3 = std::span<const std::string, 3>{vec.end()-3, vec.end()};
std::cout << "last 3: ";
printSpan(sp3);
// let span refer to the last three elements:
sp3 = std::span{vec}.last<3>();
std::cout << "last 3: ";
printSpan(sp3);
}