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.

相关推荐
fpcc10 分钟前
计算机原理—构建过程中的分段分析
c++
xxwxx__10 分钟前
C++ AVL 树深度剖析:平衡二叉搜索树原理、源码与面试考点
数据结构·c++
Escalating_xu24 分钟前
【C语言常见概念】从第一行代码到字符串结束标志:一次打通编译、main、ASCII、转义字符与注释
c语言·c++
DevRay26 分钟前
Java 21虚拟线程深度实战:告别线程池焦虑,百万并发吞吐量直接翻倍(原理+代码+避坑)
java·开发语言
bnmoel34 分钟前
C++ 基础入门篇(三):内联函数与空指针
c++·内联函数·nullptr·低层
码匠许师傅36 分钟前
【C++三方组件】TinyXML2:两个文件的极简 XML 解析器
xml·c++
free-elcmacom40 分钟前
C++学习<1>程序分区
开发语言·c++
醉颜凉1 小时前
Java 必看:如何彻底避免 HashMap 多线程死循环问题?
java·开发语言
默 语1 小时前
Java新手入门:从零开始安装JDK并配置环境变量
java·开发语言·python·mysql·group by·1024程序员节·数据去重
Brilliantwxx1 小时前
【STM32】 I2C_EEPROM_test 工程(实战篇)
开发语言·stm32·单片机·嵌入式硬件·ecmascript