vector 是单端开口的容器,尾部插入和删除元素速度快;deque 是双端开口的容器可以头部插入也可以尾部插入,速度快。但是中间插入速度慢,遍历速度快。
- vector 是动态数组,在堆中分配内存,元素是连续存放的。可以动态扩容。
- vector 即使大小减少,内存也不会被释放,通常状态下不会移动内存,只有保留内存不够的时候,才会对中间和开始处的内存进行移动。
- vector 的存储数据的时候,会遵循以下顺序: 建立空间->填充数据->如果插入的数据超过预留的空间大小,重建更大的空间 ->复制原有空间的内容->删除原有空间->添加新数据从而保证内存空间的连续性
- deque 的存储数据的时候,是如下顺序的: 建立空间->填充数据->插入数据时,建立新空间->填充新数据,deque 是由多个分段连续的内存空间组成。
-
#include <iostream> #include <vector> #include <deque> using namespace std; int main(void) { vector<int> v(2); v[0] = 10; int*p = &v[0]; cout << "vector中第一个元素的迭代指针*p:" << *p << endl; v.push_back(20); cout << "vector容量变化后vector第一个元素的迭代指针*p:" << *p << endl; deque<int> d(2); d[0] = 10; int *q = &d[0]; cout << "deque中第一个元素的迭代指针*q:" << *q << endl; d.push_back(20); cout << "deque容量变化后deque第一个元素的迭代指针*q:" << *q << endl; return 0; }
运行结果如下:
vector中第一个元素的迭代指针*p:10 vector容量变化后vector第一个元素的迭代指针*p:-572662307 deque中第一个元素的迭代指针*q:10 deque容量变化后deque第一个元素的迭代指针*q:10
说明vector进行分重新分配空间,复制原有空间的内容,并删除的原空间。