网站原型设计规范,seo分析,做网站用的hu软件,制作网站深圳这篇文章当中我们讲一下如何使用C自带的standard array来处理静态数组。
首先什么是静态数组#xff0c;静态数组通常指的是不会增长的数据#xff0c;长度是已经确定了的。我们在定义数组的时候就必须确定好长度与类型。
其次C当中也确实给我们提供了一些可以用来处理静态…这篇文章当中我们讲一下如何使用C自带的standard array来处理静态数组。
首先什么是静态数组静态数组通常指的是不会增长的数据长度是已经确定了的。我们在定义数组的时候就必须确定好长度与类型。
其次C当中也确实给我们提供了一些可以用来处理静态数组的办法之前已经介绍过的包括原始数组和STL vector而C library当中还为我们提供了另一个就是array类型。array的使用方式如下所示
#includearray
std::arrayint, 5 data;
可以看到array是基于模板的我们在定义的时候会分别确定数组的类型与长度。这种写法与C语言类型的数组是相同的不过目前我们不会深入了解这一部分。
使用array的一个好处是因为它实际上是一个模板类所以我们终于可以获得一个数组的长度了通过调用array.size()就可以获取其长度
std::arrayint, 5 data;
int a data.size();
如果我们获得一个原始数组我们希望能够循环打印它的元素的时候我们需要同时传入数组指针以及它的长度
void print(int* array, int length) {for (int i 0; i length; i) {std::cout array[i] std::endl;}
}
但是当我们想要传入一个array数组的时候我们又遇到了一个难题就是确实我们不需要传入两个变量但是array本身就是需要标明它的长度的
void print(const arrayint, 5 arr)
如果这样的话好像也是必须得先把长度传入进去才行这和之前的原始数组就没有什么区别了。那么如何在不知道standard array是多长的情况下传入一个array我的想法是需要使用模板函数
templateint T
void print(const std::arrayint, T arr) {for (int i 0; i arr.size(); i) {std::cout arr[i] std::endl;}
}
这样我们就可以在不知道array有多长的情况下依然顺利的把array给传入进去了。
在内存储存方式上array与C语言风格的数组是一样的都是储存在栈当中的。我们可以直接进入到array文件当中就可以找到library定义的array模板类 其中我们可以直接看到对于内存的分配就是很简单的一句话
_Ty _Elems[_Size];
所以很明显这是栈上申请内存。
同样我们可以看到在内存检查的时候代码如下
#if _CONTAINER_DEBUG_LEVEL 0_STL_VERIFY(_Pos _Size, array subscript out of range);
很明显我们只有在debug模式下才会进行边界检查并打印错误信息但是在release模式下array的操作是与普通数组完全一样的这也带来了array很高的使用效率所以尽可能使用array是很好的选择因为一方面它可以为我们提供内存检查与长度信息另一方面在release版本中又不会影响使用新能。
最后一个小细节就是如果我们来看size函数
_NODISCARD constexpr size_type size() const noexcept {return _Size;
}
会发现它是直接把我们输入进去的长度返回了它不会用一个变量储存这个长度信息因为我们使用的是模板类函数。
以上就是有关于standard array的全部内容了希望大家喜欢