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 是离散存储的,在首尾插入元素,效率很高。

适用对象:

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

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

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

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

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

3. 全局区(静态区):这二者在一起。程序结束之后释放。

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

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

介绍下C++智能指针

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

C++的多态

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

虚函数

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

指针和引用的区别

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

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

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

引用更安全。

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

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

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

原文地址:https://www.cnblogs.com/chengxuyuanxiaowang/p/4497608.html