C++ 常见面试题目 (二)
来源:互联网 发布:化学分析软件 编辑:程序博客网 时间:2024/05/22 03:05
C++ 常见面试题目 (二)
C++ STL中vector、hashmap等,很多公司面试官会问这些是怎么实现的。
1. vector的实现
《STL源码剖析》书上的原话:
vector的数据安排以及操作方式,与array非常相似,两者的唯一区别是空间运用的灵活性。array是静态空间,一旦配置了就不能改变;vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。因此,vector的运用对于内存的合理利用与运用的灵活性有很大的帮助,我们再也不必因为害怕空间不足而一开始要求一个大块头的array了,我们可以安心使用array,吃多少用多少。
vector的实现技术,关键在于其对大小的控制以及重新配置时的数据移动效率。一旦vector的旧有空间满载,如果客户端每新增一个元素,vector的内部只是扩充一个元素的空间,实为不智。因为所谓扩充空间(不论多大),一如稍早所说,是” 配置新空间/数据移动/释还旧空间 “的大工程,时间成本很高,应该加入某种未雨绸缪的考虑。稍后我们便可看到SGI vector的空间配置策略了。
vector的实现注意的问题有以下3点:
(1)vector和array一样,都支持随机访问任意位置,都是连续的存储空间。不同的是,array是静态空间,一旦分配了就不能改变;vector是动态的数组,定义时不必指定大小,只管用就好了,当内存空间不足,会重新分配两倍旧空间大小的新空间,将原数据复制到新空间,释放旧空间,分配的新空间且不是旧空间后面连续的空间,这个过程不需要程序员处理;
(2)STL中的容器都存在迭代器,vector也存在迭代器,这个迭代器是对指针的封装,里面重载了很多的运算符方法;
(3)对vector的任何操作,一旦引起空间重新配置,指向原vector的所有迭代器就都失效了。
参考:
[1] http://www.cplusplus.com/reference/vector/vector/
[2] 《STL源码剖析》
2. hashmap的实现
- 常见数据结构面试题目(二)
- C++ 常见面试题目 (二)
- C/C++常见面试题目
- c/c++面试常见题目
- C/C++ 面试常见题目
- 面试准备之常见上机题目搜罗(二)
- Android笔试和面试常见题目(二)
- C语言笔试面试常见编程题目(更新中)
- C/C++面试、笔试题目(二)
- C/C++面试、笔试题目(二)
- C/C++笔试面试常见题目2
- C/C++ 常见面试题目 (一)
- C/C++ 笔试、面试题目大汇总(二)
- C语言面试宝典题目分析(二)
- C/C++ 笔试、面试题目大汇总(二)
- linux c/c++ 面试题目整理(二)
- 常见的C语言面试编程题(二)
- C/C++面试常见关键字总结(二)
- 【leetcode】Implement Queue using Stacks
- Laravel资料总结
- 242-e-Valid Anagram
- Java验证码读取
- 高清屏的背景图片适配
- C++ 常见面试题目 (二)
- JQuery隐藏,显示div的方法
- [objective-c]获取ip地址
- C语言编程入门——指针(下)
- STM32 TFT学习笔记——SD卡读写
- 可滑动关闭的对话框(一)
- 华为是怎样研发的(12)——FMEA分析
- Good Luck in CET-4 Everybody! HDOJ(巴什博弈)
- Eclipse之CTRL+左键直接进入方法函数Implementation