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.

相关推荐
weixin_440784115 小时前
【HandlerThread实现原理】
android·java·开发语言
天空'之城5 小时前
C 语言工业级通用组件手写 24:互补滤波
c语言·开发语言·互补滤波·嵌入式算法·工业级组件
XR1234567885 小时前
工厂车间无线网络方案对比:AGV漫游哪家强?
开发语言·php
傻啦嘿哟5 小时前
某短视频平台视频爬虫实战:抓取推荐流视频信息,绕过反爬的3种技巧
开发语言·爬虫·python
現実君6 小时前
【硬件进阶】AD22上位替换JLEDA教程
开发语言·php
mubei-1236 小时前
SpringDAO的用法
java·开发语言·数据库
2601_956121978 小时前
二分算法(知识点+题目)
c++·算法
格林威9 小时前
多相机微秒级对齐:硬件触发 vs PTP(IEEE 1588)方案实战对比
开发语言·人工智能·数码相机·机器学习·计算机视觉·视觉检测·机器视觉
初级代码游戏10 小时前
iOS开发 Swift 速记2:三种集合类型 Array Set Dictionary
开发语言·ios·swift
蒙奇·D·路飞-10 小时前
OpenClaw:开源的《合金弹头》精神续作与终极本地部署指南
c++·开源·mfc