vector和数组区别:
vector是个容器,array不是
vector可以知道自己的大小,array不知道
vector可以变大变小,这里变小指的是元素数目,array不能变大变小
数组在内存中分配的连续空间,多次分配释放后会有内存碎片,
而vectors是动态增长的,当前的容量(capacity)不足就申请一块当前容量2倍的新内存空间,然后将所有的老元素全部拷贝到新内存中,添加大量元素的时候的花费的惊人的大.
还有vector的迭代器能防止出现类似数组愈界,所以vector更加安全,健壮 等等
效率上我认为数组更高一点,数组只是一个基本类型,少了vector 的封装,少了构造函数和析构函数这些操作
vector和deque的相同点
1.顺序容器
2.为动态一维数组
3.在中间位置插入和删除操作时间复杂度为O(N);
4.可以快速随机访问元素
不同点:
1.vector支持push_back, pop_back操作; deque支持push_back, push_front, pop_back, pop_front操作;
2.vector的push_back, pop_back操作时间复杂度为O(1), 头部插入和删除操作时间复杂度为O(N);deque的push_back, push_front, pop_back, pop_front操作时间复杂度为O(1);
3.vector为连续的存储空间; deque的存储空间为页面或块;
4.vector预留存储空间;deque不预留存储空间.
list和map的区别:
list底层基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢。
list 的push_back, push_front, pop_back, pop_front操作时间复杂度为O(1),查找的话需要通过迭代器编译 时间复杂度是O(n)
map 的内部实现是RB-tree 红黑二叉树 插入和删除的时间复杂度是O(LOG2N)