c++ span的用法

std::span可以直接操作一段连续内存的数据,零拷贝。测试下:

cpp 复制代码
static void print_data(std::span<int> data) {
    for (int val : data) {
        std::cout << val << " ";
    }
    std::cout << std::endl;
}

void testSpan(void) {
    int c_arr[] = {1527, 1314520};
    print_data(c_arr); // 自动从数组构造 span

    std::vector<int> vec = {520, 996};
    print_data(vec);   // 自动从 vector 构造 span

    std::span<int> span(vec);
    std::span<int> sub = span.subspan(1, 2);
    print_data(sub);

    sub[0] = 98; // 把996改为了98
    print_data(vec);
}

运行:

ok. 有个小问题, print_data(sub) 这句代码打印:996 1541734736 , 第2个值是垃圾值。 因为前面std::span<int> sub = span.subspan(1, 2); 这句代码意思是从下标1开始,向后取2个元素。而实际上下标1后面没有元素了,取的是垃圾值。修改下代码,只取一个元素:

cpp 复制代码
void testSpan(void) {
    int c_arr[] = {1527, 1314520};
    print_data(c_arr); // 自动从数组构造 span

    std::vector<int> vec = {520, 996};
    print_data(vec);   // 自动从 vector 构造 span

    std::span<int> span(vec);
    std::span<int> sub = span.subspan(1, 1); // {996} , 对应原数组索引1处的数
    print_data(sub);

    sub[0] = 98; // 把996改为了98
    print_data(vec);
}

打印:

ok.

相关推荐
搭贝5 小时前
上厕所的时间搭好一套系统:AI自动生成实测
开发语言·人工智能·低代码·ai·php·搭贝
智感子6 小时前
智能称重·数据上云:从仪表读数到可追溯的计量凭证
开发语言·php
\光辉岁月/6 小时前
7.javase-面向对象
java·开发语言
weixin_531094696 小时前
heap_4内存管理
java·开发语言·算法
余额瞒着我当琳6 小时前
红黑树的实现--红黑树的概念、规则、效率、结构、旋转、查找、验证
数据结构·c++·算法
疯狂的维修6 小时前
关于用C#写电机起保停控制
开发语言·c#
青少儿编程课堂6 小时前
AC自动机多模式串匹配精讲:校园关键词巡检实战解析
c++·python·算法·bfs·信息学竞赛
longlongzihan7 小时前
LeetCode 5. 最长回文子串:从暴力匹配到中心扩展的思维演进
c++·算法·leetcode
多弗朗皮卡丘7 小时前
C++继承
c++·继承
geovindu7 小时前
rust: Abstract Factory pattern
开发语言·后端·设计模式·rust·抽象工厂模式