考虑一个大内存容器。在这个简单的例子中std::vector<int>:
std::vector v = { 0, 1, 2, 3, 4, 5 };
Run Code Online (Sandbox Code Playgroud)
std::span允许我创建一个轻量级的内存视图。现在我想简单地打印跨度:
template<typename T>
void print(std::span<T> span) {
std::cout << '[';
if (span.size())
std::copy(span.begin(), span.end() - 1, std::ostream_iterator<int>(std::cout, ", "));
std::cout << span.back() << "]\n";
}
int main() {
std::vector v = { 0, 1, 2, 3, 4, 5 };
print(std::span{ v });
}
Run Code Online (Sandbox Code Playgroud)
输出:
[0, 1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)
现在我想制作子集(这是std::span实际作为视图变得有用的地方)。我可以用迭代器来指定我的范围,并调用此构造函数(3)从std::span
template< class It, class End >
explicit(extent != std::dynamic_extent) …Run Code Online (Sandbox Code Playgroud)