std::span是C++20引入的非拥有式视图,用于安全访问连续内存,支持数组、vector等,避免数据拷贝。1. 声明为std::span或std::span,可自动推导大小。2. 可通过subspan、first、last获取子视图。3. 支持const数据和多维数组操作,提升代码安全与可读性。

在 C++20 中,std::span 是一个轻量级的非拥有式(non-owning)视图,用于安全地访问连续的内存序列,比如数组、std::array、std::vector 等。它不复制数据,只提供对已有数据的引用,避免了不必要的拷贝和指针操作。
基本用法
std::span 的模板参数可以指定元素类型和长度(可选)。如果省略长度,则表示动态大小的 span。
声明方式:std::span 或 std::span(N 为固定大小) 构造方式:支持从数组、vector、array 等构造
示例代码:
#include #include #include void print_span(std::span sp) { for (int x : sp) { std::cout << x << " "; } std::cout << "n";}int main() { std::vector vec = {1, 2, 3, 4, 5}; std::span sp(vec); // 自动推导为 std::span print_span(sp); int arr[] = {10, 20, 30}; std::span sp2(arr); // 指向 arr 的三个元素 print_span(sp2);}
子视图操作(subspan)
你可以通过 subspan、first、last 方法获取原 span 的一部分。
立即学习“C++免费学习笔记(深入)”;
sp.subspan(pos, len):从位置 pos 开始取 len 个元素 sp.first(n):前 n 个元素 sp.last(n):后 n 个元素
示例:
std::vector data = {1, 2, 3, 4, 5, 6};std::span sp(data);auto part1 = sp.first(3); // {1, 2, 3}auto part2 = sp.last(2); // {5, 6}auto middle = sp.subspan(2, 3); // {3, 4, 5}print_span(part1);print_span(part2);print_span(middle);
与 const 和多维数组的配合
你可以创建指向 const 数据的 span,也可以处理二维数组(如 std::array, 4>)。
const 示例:
const std::vector values = {100, 200, 300};std::span csp(values); // 只读访问
二维数组示例:
#include std::array<std::array, 4> matrix{{ {{1,2,3}}, {{4,5,6}}, {{7,8,9}}, {{10,11,12}}}};for (auto& row : matrix) { std::span row_sp(row); // 每行转为 span print_span(row_sp);}
基本上就这些。std::span 使用简单,能有效替代原始指针 + 长度的模式,提升代码安全性与可读性。
以上就是c++++20中的std::span怎么使用_c++20 std::span使用方法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1477985.html
微信扫一扫
支付宝扫一扫