介绍
本篇内容介绍了“C + + 11的数组容器怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!,,,,,,,,,,,,,,,,
<强>内置数组
强>
数组是C语言中最常用的数据结构之一,但是它的使用比较麻烦。首先是大小没有管理,二是越界操作没有检查。虽然C/c++也提供了一些解决办法,但总是不够完美。例如下面的代码:
<代码> int必要[5],
memset(必要0 sizeof(必要);
unsigned int i=0;
, (i,,必要[我]=我;
,,我+ +,
} 代码>
对于元素的个数通过sizeof计算数组中元素的个数,是否越界,就只能靠程序员自己来保证了。
<强>阵列容器强>
c++ 11中引入了数组容器,基本上解决了内置数组的问题:
<代码> std:: arrayc11ary.fill (0);
unsigned int i=0;
, (i,,c11ary.at (i)=我;
,,我+ +,
} 代码>
这段代码中,
- <李>
使用填充方法实现了数据填充。
李> <李>使用大小方法取得数组的大小。
李> <李>虽然在(我)方法实现带有越界检查的读写。
李><强>没有免费的误餐强>
为了了数组解容器的性能,我们编写下面的代码来测试写入效率:
<代码> DWORD开始=GetTickCount ();
std:: array//int ary [10000];
//std:: vector必要(10000 0);
std:: cout & lt; & lt;sizeof(必要)& lt; & lt;std:: endl;
(int s=0;s & lt;10000;+ +){
,,(int i=0;我& lt;10000;我+ +){
,,,,必要[我]=s +我。
,,}
}字
结束=GetTickCount ();
std:: cout & lt; & lt;结束,开始& lt; & lt;std:: endl;
代码>
代码分别使用数组容器,内置数组,向量容器进行了确认,结果如下:
首先是占用空间的比较结果:数组容器和内置数组占用相同的内存空间,向量只有12个字节,真正用于保存数据的内容应该是从堆中获取的。
写入速度的比较结果:内置数组的速度最快,向量容器次之,数组容器最慢。
但从数组和内置数组的比较结果来讲,牺牲了一些性能,换来了安全和便利。但是向量的效率超过数组,让人很意外。