人生的过程,不断学习、不断向前迈进的过程

对于vector容器的一点心得

    vector容器为了支持快速的随机访问,其元素是以连续的方式存放--每一个元素都紧挨着前一个元素存储。看到这里,是不是想真起了数组的存储方式?那这样的话虽然访问比较快速,但我们往容器内添加一个元素的时候,岂不是得重新分配存储空间,用以存放原来的元素以及新添加的元素:存放在旧存储空间中的元素被复制到新存储空间里,接着插入新元素,最后撤销旧的存储空间。假如每次添加新元素都得这样的话,那这种性能将会让人无法忍受。既然这样,那为什么还要设计vector容器呢,因为按这样的话list容器应该优于vector容器啊。但是,通常出现的反而是以下情况:对于大部分应用,使用vector容器是最好的。原因在于,标准库的实现者使用这样的内存分配策略:以最小的代价连续存储元素。由此而带来的访问元素的便利弥补了其存储代价。
    为了使vector容器实现快速的内存分配,其实际分配的容量要比当前所需的空间多一些。这样的话,并不是每次添加元素时都需要生分配容器。这样效率自然比较高。这就是用空间换时间吧。vector类有两个成员函数:capacity和reserve,使程序员可与vector容器内存分配的实现部分交互工作。capacity操作获取在窗口需要分配更多的存储空间之前能够存储的元素总数,而reserve操作则告诉vector容器应该预留多少个元素的存储空间。这里先要弄清楚capacity和size的区别,size指的是容器当前所拥有的元素的个数,而capacity则指容器在必须分配新存储空间之前可以存储的元素总数。这样的话,如果size不超过capacity的话,容器就不用分配新存储空间。通常size是少于capacity的。reserve操作可以增加容器预留的存储空间,但要注意,不可以减少容器原本已经预留的存储空间,只能增加。
    总的来说,比起list和deque容器,vector的增长效率通常会更高。但如果在内存分配比较严格的情况下,选用list容器可能会更好一点,毕竟list容器是采用链表的存储方式的,空间利用比较有效,当然,在读取的时候效率肯定是会比较低的。

没有评论:

发表评论