C++ 面试准备题

C++ STL 里map 和 hash_map的异同

答:

C++ 11标准之中,定义了unordered_map,就是一种hash_map 。程序员

相同点:安全

1. 两者的用法相同,有insert,size,count等操做。全部元素是以pair类型存储。函数

不一样点:指针

1. 底层实现不一样。map是基于rb_tree, hash_map是基于哈希表。对象

2. hash_map的速度更快,查找速度为O(1)。map的查找速度是O(log(n))。插入数据的速度一样,hash_map的速度会快不少。内存

3. hash_map相比于map会消耗更多的存储空间,因此须要控制内存空间的时候需慎重使用hash_map。字符串

list 和 vector 的区别

1. vector为对象分配连续的空间,因此随机访问的效率很高。适合存储小容量内容。大容量数据的话,vector的开销成本太大。编译器

2. list 是离散存储的,在首尾插入元素,效率很高。hash

适用对象:

vector:对象数量变化少,随机访问元素频繁。编译

list: 对象数量变化大,对象复杂,插入和删除频繁。

C++ 占用的内存有哪些部分

1. 栈: 编译器自动分配和释放。存放局部变量值等等。

2. 堆: 程序员分配和释放,或者程序结束时候OS回收。

3. 全局区(静态区):这两者在一块儿。程序结束以后释放。

4. 文字常量区:常量字符串存放的地方。

5. 程序代码区:存放程序代码。

介绍下C++智能指针

它是存储指向动态分配对象指针的类,用于生存期控制,可以自动正确的销毁动态分配的对象,防止内存泄露。他使用的方法是引用计数。每次建立智能指针类的对象时,计数置为1。对该对象赋值时,赋值操做符作操做时所指向的对象减掉1。右操做符指向对象计数+1。若是引用计数减为0,删除基础对象。

C++的多态

多态就是讲子类类型的指针赋值给父类类型的指针。

虚函数

虚函数经过一张虚函数表实现。当咱们用父类指针操做子类时,用这张表来查找实际应该调用哪个函数。

指针和引用的区别

引用不能为空,指针可为空,不过最好不要为空。

引用定义时必须初始化,指针没必要。

引用不改变指向,指针会。

引用更安全。

动态绑定和静态绑定的区别

静态绑定:对象是静态类型。出虚函数以外全都是静态绑定。

动态绑定:对象是动态的类型。发生在运行期。只有虚函数可使用。

相关文章
相关标签/搜索