STL容器的实现原理
2016-01-25 10:45
246 查看
List封装了链表,Vector封装了数组, list和vector得最主要的区别在于vector使用连续内存存储的,他支持下标访问,而list是以链表形式实现的,不支持下标访问。
Vector对于随机访问的速度很快,但是对于插入尤其是在头部插入元素速度很慢,在尾部插入速度很快。List对于随机访问速度慢得多,因为可能要遍历整个链表才能做到,但是对于插入就快的多了,不需要拷贝和移动数据,只需要改变指针的指向就可以了。
Map,Set属于标准关联容器,使用了非常高效的平衡检索二叉树:红黑树,他的插入删除效率比其他序列容器高是因为不需要做内存拷贝和内存移动,而直接替换指向节点的指针即可,最好和最坏都是logn。
Set和Vector的区别在于Set不包含重复的数据。Set和Map的区别在于Set只含有Key,而Map有一个Key和Key所对应的Value两个元素。
Map和Hash_Map的区别是Hash_Map使用了Hash算法来加快查找过程(Map使用二叉查找树,效率log n和二分查找一样),但是需要更多的内存来存放这些Hash桶元素,因此可以算得上是采用空间来换取时间策略。
Vector对于随机访问的速度很快,但是对于插入尤其是在头部插入元素速度很慢,在尾部插入速度很快。List对于随机访问速度慢得多,因为可能要遍历整个链表才能做到,但是对于插入就快的多了,不需要拷贝和移动数据,只需要改变指针的指向就可以了。
Map,Set属于标准关联容器,使用了非常高效的平衡检索二叉树:红黑树,他的插入删除效率比其他序列容器高是因为不需要做内存拷贝和内存移动,而直接替换指向节点的指针即可,最好和最坏都是logn。
Set和Vector的区别在于Set不包含重复的数据。Set和Map的区别在于Set只含有Key,而Map有一个Key和Key所对应的Value两个元素。
Map和Hash_Map的区别是Hash_Map使用了Hash算法来加快查找过程(Map使用二叉查找树,效率log n和二分查找一样),但是需要更多的内存来存放这些Hash桶元素,因此可以算得上是采用空间来换取时间策略。
相关文章推荐
- scrollView中放ViewPager和GridView滑动起来,事件冲突的问题。
- SAP BW取某日期的上个月最后一天的日期时间
- Git--01配置身份、创建代码库、提交代码
- 《Effective java》读书记录-第20条-类层次优于标签类
- iOS开发笔记--关于 setBackgroundImage 和 setImage
- Solr-5.3.0学习笔记(二)Solr Admin UI
- 单例模式的例子
- 对JVM中垃圾回收机制的个人理解--对象的生命周期
- 在mac下通过Terminal修改host文件
- SVN 的安装部署
- Expected MultipartHttpServletRequest: is a MultipartResolver configured?
- 本地电脑域名映射文件位置
- Fragment总结
- sqlserver 截取与定位
- jackson 实体转json 为NULL或者为空不参加序列化
- 调用和隐藏系统输入法
- iOS UICollectionView之-(水平滚动)
- linux下移动或者复制文件覆盖相同文件夹时,文件夹里面的每个文件都提示是否覆盖
- HashTable浅析
- proxy_redirect参数的作用