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.

相关推荐
caimouse1 小时前
KiSystemStartupBootStack 函数分析
开发语言·reactos
薛定猫AI1 小时前
【深度解析】动态多智能体团队:并行规划、开发与验证的 Python 实战
大数据·开发语言·python
t-think2 小时前
一起think C++:C++基础篇(一)—— namespace、IO、缺省参数与函数重载
c++
持力行9 小时前
从C struct到C++中的class
c语言·c++
meilindehuzi_a10 小时前
从零理解并实现 RAG:用 LangChain.js 构建语义检索问答系统
开发语言·javascript·langchain
风流 少年10 小时前
Julia
开发语言·julia
江畔柳前堤11 小时前
GO01-Go 语言与主流编程语言深度对比
开发语言·人工智能·后端·微服务·云原生·golang·go
:-)11 小时前
算法-归并排序
java·开发语言·数据结构·算法·排序算法
GIS阵地12 小时前
QgsRasterDataProvider 完整详解(QGIS 3.40.13 C++)
开发语言·c++·qt·开源软件·qgis