iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++20中的std::span怎么使用
  • 628
分享到

C++20中的std::span怎么使用

2023-07-05 09:07:38 628人浏览 薄情痞子
摘要

这篇文章主要讲解了“c++20中的std::span怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++20中的std::span怎么使用”吧!span就是一个连续对象存储的观察者。

这篇文章主要讲解了“c++20中的std::span怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++20中的std::span怎么使用”吧!

span就是一个连续对象存储的观察者。类似std::string_view是string的观察者。
连续的存储,不一定是数组。例如:

zero(char (&arr) [10]);  //10个元素的数组, sizeof(arr)==10*sizeof(char)==10zero(char arr[]);  //arr退化为指针, sizeof(arr)==sizeof(char*)zero(char *arr, size_t n);  //处理任意含n个char的连续内存 void main(){    char* pc = new char[10];    zero(pc,10);  //连续内存,但不是数组}

为了程序的复用性,我们一般使用zero(char* arr, size_t n);这种函数签名。

template<size_t N>void zero(char (&arr)[N]) ;

这种模板形式虽然比只能处理char[10]这种类型的zero函数,适用性大一些,但是它仍不能处理广义上的连续char内存。
zero(char*arr, sizr_t n)的灵活性是有了,问题是用户(调用者)可能把n填错。例如:

char aa[10];zero(aa,20);

为了解决这个问题,我们需要写很繁琐的代码:

char aa[10];std::array<char,10> bb; zero(aa,sizeof(aa)/sizeof(aa[0]));zero(bb.data(),bb.size());

有了std::span, 我们可以:

void zero( std::span<char> sp ){    size_t n = sp.size();    sp[n-1]=0; //当数组越界时,仍可能引发事故。} char aa[10];std::array<char,10> bb;  zero(aa);zero(bb);  //简化,统一

我们可以手工粗陋的制作一个span类,虽然它不符合STL容器规范,但是可以看出主要核心骨架

// This file is a "Hello, world!" in C++ language by GCC for wandbox.#include <iOStream>#include <cstdlib>#include <array> template<class T>class span{public:    template<size_t N>    span(T (&arr)[N]){        arr_ = arr;        n_ = N;    }        template<size_t N>    span(std::array<T,N>& arr){        arr_ = arr.data();        n_ = N;    }        span(T* arr,size_t n){        arr_ = arr;        n_ = n;    }        T* data(){ return arr_;}    size_t size(){ return n_;}    private:    T* arr_;    size_t n_;}; void zero( span<char> sp ){        char* arr = sp.data();    size_t n = sp.size();    arr[n-1]=0;} int main(){    char aa[10];    std::array<char,10> bb;        size_t n=10;    char* pc = new char[n];    zero(aa);    zero(bb);    zero({pc,n});   }

感谢各位的阅读,以上就是“C++20中的std::span怎么使用”的内容了,经过本文的学习后,相信大家对C++20中的std::span怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: C++20中的std::span怎么使用

本文链接: https://www.lsjlt.com/news/350752.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++20中的std::span怎么使用
    这篇文章主要讲解了“C++20中的std::span怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++20中的std::span怎么使用”吧!span就是一个连续对象存储的观察者。...
    99+
    2023-07-05
  • C++20中的std::span详解
    span就是一个连续对象存储的观察者。类似std::string_view是string的观察者。连续的存储,不一定是数组。例如: zero(char (&arr)...
    99+
    2023-03-06
    C++20 std::span C++ std
  • C++20中的span容器怎么使用
    这篇“C++20中的span容器怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++20中的span容器怎么使用”文...
    99+
    2023-07-05
  • C++20中的span容器及用法小结
    目录一.span容器二.span的用法1.将数组转换为 span:2.使用 span 来遍历一个容器:3.使用 span 来获取子序列:4.将 span 转换为其他容器类型:三.sp...
    99+
    2023-03-06
    C++20中的span C++ span
  • c++中std::怎么用
    std 是 c++ 中包含标准库组件的命名空间。为了使用 std,需要使用 "using namespace std;" 语句。直接使用 std 命名空间中的符号可以简化代码,但建议仅在...
    99+
    2024-05-09
    c++ 标准库
  • C++的std::any怎么使用
    这篇文章主要介绍了C++的std::any怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++的std::any怎么使用文章都会有所收获,下面我们一起来看看吧。    一般来说,c+...
    99+
    2023-06-29
  • C++ std::thread怎么使用
    这篇文章主要介绍了C++ std::thread怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++ std::thread怎么使用文章都会有所收获,下面我们一起来看看吧。C++是一...
    99+
    2023-07-05
  • C++中std::thread线程怎么使用
    本篇内容主要讲解“C++中std::thread线程怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++中std::thread线程怎么使用”吧!1:std::thread的基本用法最简...
    99+
    2023-07-04
  • C++中std::conditional如何使用
    本篇内容介绍了“C++中std::conditional如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!std::conditiona...
    99+
    2023-07-02
  • C++的std::shared_mutex读写锁怎么使用
    这篇“C++的std::shared_mutex读写锁怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++的std:...
    99+
    2023-06-29
  • C++中std::conditional的使用说明
    目录std::conditional的使用具体用法具体理解为以下显示了更多的例子利用std::conditional实现变量的多类型std::conditional的使用 今天在项目...
    99+
    2024-04-02
  • C++语言中std::array怎么用
    这篇文章给大家分享的是有关C++语言中std::array怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。概述std::array是在C++11标准中增加的STL容器,它的设计目的是提供与原生数组类似的功能与...
    99+
    2023-06-15
  • C++中多线程std::call_once怎么用
    这篇文章主要介绍了C++中多线程std::call_once怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在多线程的环境下,有些时候我们不需要某个函数被调用多次或者某些...
    99+
    2023-06-29
  • c++11中std::move函数的使用
    C++11在运行期有所增强,通过增加核心的右值引用机制来改善临时对象导致的效率低下的问题。C++临时对象引入了多余的构造、析构及其内部资源的申请释放函数调用,导致程序运行时性能受损,...
    99+
    2024-04-02
  • VSCode怎么使用最新的C++20
    本篇内容主要讲解“VSCode怎么使用最新的C++20”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“VSCode怎么使用最新的C++20”吧!先下载MSYS2打开MSYS2的官网:https:/...
    99+
    2023-06-29
  • c++中std::什么作用
    std:: 是 c++ 中包含标准库函数、类和对象的命名空间,简化了软件开发。其具体作用包括:提供数据结构容器,如向量和集合;提供遍历容器的迭代器;包含各种算法用于操作数据;提供输入/输...
    99+
    2024-05-09
    c++ 代码可读性 标准库
  • C++中std::allocator的使用案例详解
    标准库中包含一个名为allocator的类,允许我们将分配和初始化分离。使用allocator通常会提供更好的性能和更灵活的内存管理能力。    ...
    99+
    2024-04-02
  • C++11中std::ref和std::cref的作用是什么
    这篇文章给大家分享的是有关C++11中std::ref和std::cref的作用是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、源码准备本文是基于gcc-4.9.0的源代码进行分析,std::ref和st...
    99+
    2023-06-15
  • c++中std::vector的作用是什么
    在C++中,std::vector是STL(Standard Template Library)中的一个容器类,用来存储一组元素。它...
    99+
    2024-03-12
    c++
  • C++多线程std::call_once的使用
    在多线程的环境下,有些时候我们不需要某个函数被调用多次或者某些变量被初始化多次,它们仅仅只需要被调用一次或者初始化一次即可。很多时候我们为了初始化某些数据会写出如下代码,这些代码在单...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作