怎么使用span解决数组退化和越界访问

技术怎么使用span解决数组退化和越界访问本篇文章给大家分享的是有关怎么使用span解决数组退化和越界访问,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。数组

本文讲述如何使用span解决阵列降级和跨界访问问题。边肖觉得很实用,所以分享给大家学习。希望你看完这篇文章能有所收获。让我们和边肖一起看看。

数组是C语言继承自C语言的一个特性。它易于使用,同时可以提供出色的性能,因此得到了广泛的应用。但是简单的另一面是风险,最大的两个问题是阵列退化和距离误差。如何提前利用C 20的新特性跨度,解决阵列降级和跨界访问的问题。

首先,看看使用数组的最常见代码:

int data[10];for(size _ ti=0;isizeof(数据)/sizeof(数据[0]);I){ data[I]=0;}

当定义一个数组时,同时存在关于元素数量的信息。这些信息可以用来操纵数组。但是,当数组作为参数传递给函数时,它只能作为指针传递,这就是数组退化。为了正确掌握阵列的大小,一般需要同时传输阵列的大小信息。例如,以下初始化函数是这样的:

voidinit_data(intbuffer[],size _ tsize){ cout ' size=' sizeendl;for(GSL : indexi=0;isizeI){ buffer[I]=I;}缓冲区[4]=40;缓冲区[20]=20;//跨境访问}

即使函数参数被正式声明为数组,所有行为也与指针完全相同。另一个问题是,因为数组是完全暴露的数据结构,所以没有保护。例如,在代码的第8行,即使访问的第20个元素已经超过了前10个元素,该操作也将正常通过。但接下来不知道哪一刻,这个操作的影响会以完全不相关的形式表现出来。数组大小信息、传递错误、越界操作的获取具有易入门、难排的特点,是很多程序员的噩梦。

为了解决这个问题,GSL引入了一个模板类span,它可以同时管理数组的地址和大小。从C 20开始,这个类将成为C的标准函数。

使用span类的初始化函数如下:

void init _ data(GSL :3360 spaintbuffer){ cout ' size=' buffer . size()} endl;int value=0;for(autoit=buffer . begin();它!=buffer . end();it){ * it=值;}缓冲区[4]=10;缓冲区[20]=20;//将触发断言}

只要将函数参数声明为gsl:spanint buffer,大小信息就由span template类管理,然后数组就可以像向量一样使用了。如果发生越界访问,将触发断言。

使用数组和span传递参数的示例代码如下:

int main(){ int data[10];for(size _ ti=0;isizeof(数据)/sizeof(数据[0]);I){ data[I]=0;}//使用数组传递参数init_data(data,5);//使用span传递参数init_data(数据);返回0;}

与用数组调用相比,它在增强功能(范围检查等)的同时简化了数组的使用。)!

以上就是如何用span解决阵列降级和跨界访问。边肖认为,一些知识点可能会在我们的日常工作中看到或使用。我希望你能通过这篇文章学到更多的知识。更多详情请关注行业信息渠道。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/79844.html

(0)

相关推荐

  • 渺渺茫茫,出自西游记的茫茫渺渺是什么意思

    技术渺渺茫茫,出自西游记的茫茫渺渺是什么意思指辽阔无际的样子渺渺茫茫,亦指模糊、不清楚。原文:西游记第一回《灵根育孕源流出 心性修持大道生》混沌未分天地乱,茫茫渺渺无人见。自从盘古破鸿蒙,开辟从兹清浊辨。覆载群生仰至仁,

    生活 2021年10月24日
  • mysql高级查询中in作用是什么(mysql中and和or的用法区别举例)

    技术mysql中in和or的区别有哪些这篇文章主要讲解了“mysql中in和or的区别有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql中in和or的区别有哪

    攻略 2021年12月23日
  • Ubuntu常用命令都有哪些

    技术Ubuntu常用命令都有哪些这篇文章给大家介绍Ubuntu常用命令都有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。我们使用 Ubuntu 系统,主要是使用 Ubuntu 系统下的命令,所以

    攻略 2021年11月11日
  • C语言函数分类自定义参数及调用方法是什么

    技术C语言函数分类自定义参数及调用方法是什么本篇内容主要讲解“C语言函数分类自定义参数及调用方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言函数分类自定义参数及

    攻略 2021年11月24日
  • redis主从增量复制多久一次(redis主从复制如何配置好)

    技术Redis6中的主从复制架构有什么特点本篇内容介绍了“Redis6中的主从复制架构有什么特点”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔

    攻略 2021年12月14日
  • 微信支付集成工具是什么

    技术微信支付集成工具是什么这篇文章将为大家详细讲解有关微信支付集成工具是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。微信支付集成工具最近老板又安排了新项目,要接入微

    攻略 2021年10月20日