最近阅读Essential C++一书,发现这个数组不同的说法有着不同的含义,简单总结了一下来做个笔记。
定义方式:
这里我感觉直接引用书上的内容会比较好,因为书上讲的很通俗易懂。
书上讲的比较详细了,这里可以直接阅读。
安全性:
首先,在这三个数组中,Array 和 Vector的安全性肯定是比数组要好得多,这点毋庸置疑,那我们就在具体看一看Array 和 Vector的安全性。
Array:在C++11中新引入的容器类型,在提高安全性的同时,其可操作程度也大大提升。这里简单介绍几个个人记忆比较深的知识点:比如Array中的at()函数,他不但能以索引的方式访问指定的元素,同时还可以进行越界检查。还有影响比较深的empty()函数,可以比较便捷的查看容器是否为空。
Vector:这个就稍微有点复杂,因为要具体分类来说。
首先,我们先看一下网上对于C++多线程的定义:
在线程下,Vector是安全的,但是在多线程中,它是不安全的,这块要加以区分。因为Vector是一个内存可以动态扩展的小东西,这是个好事也是个坏事。好就好在在定义的时候不用去特意定义它的长度,在后续的操作中也不用去担心它的长度问题,因为它可以自己增加或者压缩数据。但是在多线程中,这也是一个问题。我们可以想一下多线程:要么一个读取一个写入,要么两个一起写入。如果执行一个读一个写,那倒是关系不大,两个也不冲突。但是!如果两个一起写,就会导致程序的崩溃。Vector:你俩一起写我到底存哪个,我不干了!那个有解决方法吗?当然有,加锁就好了。具体方法以后在进行扩展。
内存大小与存储的地点:
其实在刚刚已经提到过这个内存的大小问题,当使用Array进行定义时,我们需要提前定义好这个数组的容量大小,但是使用Vector时就不用考虑这个问题,在初始时即使不设定大小,Vector也会有一定的空间,当空间不够用的时候,Vector就是自动申请新的更大的内存空间,然后将原来的数据原封不动的移过去,然后释放掉旧的内存空间。在存储的地点上,Vector的数据存储在堆上,Array的数据存储在栈上。
以上是读书时的一些思考,后面继续阅读会继续写,后面还有好多(小白瑟瑟发抖)