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.

相关推荐
一直C29 分钟前
【Linux应用编程】深入理解Linux多任务机制:进程原理、状态转换与进程控制实战
linux·开发语言·算法·ubuntu·vim·visual studio code
qz5zwangzihan130 分钟前
AtCoder高频英文词汇短语
c++·atcoder·高频词
码匠许师傅39 分钟前
【C++ 面试真题】聊聊 C++ 的类型特征( type_traits)
java·c++·面试
名字还没想好☜40 分钟前
Python asyncio.Queue 实战:用生产者-消费者给爬虫/任务流限速又解耦
开发语言·爬虫·python·并发·asyncio
小小龙学IT1 小时前
C++ 性能优化:CPU 缓存与数据布局优化深度解析
c++·缓存·性能优化
玉树临风ives1 小时前
atcoder ABC 472 题解
数据结构·c++·算法
张张的快乐时光呀!1 小时前
MFC添加类向导并实现响应
c++·mfc
问君能有几多愁~1 小时前
Qt Json 序列化操作
开发语言·qt·json
xieliyu.2 小时前
MySQL 进阶笔记:用户 / 会话 / 全局 / 局部变量 + CASE 分支语法
开发语言·数据库·笔记·mysql
格林威2 小时前
C#高位深相机图像保存:12位16位图像保存方案,OpenCvSharp和Halcon实现
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机