1.具体说明STL如何实现vector
vector的内部是使用动态数组的方式来实现的,如果动态数组的内部实现不够用,就要动态的重新分配内存。然后把原数组的内容拷贝过去。
2.vector和list的区别
vector和数组类似,拥有连续的内存空间,支持随机的存取,在中间进行元素的插入和删除的操作时间复杂度是O(n)
list是由双向链表实现的,只能通过数组指针来进行数据访问,遍历中间的元素,时间的复杂度是O(n).
3.如何选择使用vector或dequeue
一般情况下使用vector,在需要从首尾两端进行插入或删除操作的时候需要选择dequeue.
map内部的实现
map的底层是一棵红黑树,在对节点的插入或是删除操作中,通过旋转来保持平衡性,最坏情况下的插入、删除、查找时间是O(logn)
map和hashmap的区别
- 底层数据结构不同,map是红黑树,hashmap是哈希表
- map元素可以自动按照键值排序,hashmap的各项操作平均时间复杂度接近常数
- map是C++标准的一部而hashmap并不是
vector中erase方法与algorithn中的remove方法区别
- vector中erase方法真正删除了元素,迭代器不能访问了
- remove只是简单地将元素移到了容器的最后面,迭代器还是可以访问到。因为algorithm通过迭代器