STL学习1:vector

vector

STL封装了许多复杂的数据结构算法和大量常用的数据结构操作。vector封装数组,list封装链表,map和set封装二叉树(红黑树)

vector是线性容器,它的元素严格按照线性序列排列,和动态数组很相似。和数组类似的是,它的元素存储在一块连续的存储空间中,这也意味着不仅可使用迭代器(iterator)访问元素,还可以使用指针的偏移方式访问。和常规数组不一样的是,vector能够自动存储元素,可以自动增长或缩小存储空间。
STL中vector和list的区别

1 vector的内存管理和效率

vector容器支持支持随机访问,因此为了提高效率,它内部是使用动态数组的方式实现的。在通过reserve()函数来申请特定大小的内存空间时候总是按指数边界来增大其颞部缓冲区。当进行insert或push_back等增加元素的操作时,如果此时动态数组的内存不够用,就要动态的重新分配当前大小的1.5~2倍的新内存区,再把原数组的内容复制过去。
reserve成员函数允许开发者最小化必须进行的重新分配的次数,因而可以避免真分配的开销和迭代器、指针、引用失效。
注:
(1)size()可以获得容器中有多少元素,但不能获得容器为它容纳的元素分配的内存大小。
(2) capacity()可以获得容器在它已经分配的内存中可以容纳多少元素。那是容器在那块内存中总共可以容纳多少元素,而不是还可以容纳多少元素。如果想知道一个vector或string中有多少没有被占用的内存,则必须从capacity()中减去size()。如果size()和capacity返回同样的值,容器中就没有剩余空间了,而下一次插入(通过insert或者push_back等)会引发上面的重新分配步骤。

2 vector接口

你可能感兴趣的:(面试)