现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

vector,deque,list,map,数组比较与分析

2013-12-29 21:26 工业·编程 ⁄ 共 821字 ⁄ 字号 暂无评论

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)

给我留言

留言无头像?