C++常见面试题


1. STL相关问题

1、介绍一下STL

STL是标准模版库,由容器算法迭代器组成。

STL有以下的一些优点:

(1)可以很方便的对一堆数据进行排序(调用sort());

(2)调试程序时更加安全和方便;

(3)stl是跨平台的,在linux下也能使用。

vector实质上就是一个动态数组,会根据数据的增加,动态的增加数组空间。

什么是容器。如何实现?

容器是一种类类型,用来存储数据

STL有7种主要容器:vector,list,deque,map,multimap,set,multiset.

2、vector和list的区别?

vector的数据结构:vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。
因此能高效的进行随机存取,时间复杂度为o(1);但因为内存空间是连续的,所以在进行插入和删除操作时,会造成内存块的拷贝,时间复杂度为o(n)。另外,当数组中内存空间不够时,会重新申请一块内存空间并进行内存拷贝。

list的数据结构:list是由双向链表实现的,因此内存空间是不连续的。只能通过指针访问数据,所以list的随机存取非常没有效率,时间复杂度为o(n);但由于链表的特点,能高效地进行插入和删除。

二者的区别:

vector拥有一段连续的内存空间,能很好的支持随机存取,list的内存空间可以是不连续,它不支持随机访问.

如果需要高效的随机存取,而不在乎插入和删除的效率,使用vector;
如果需要大量的插入和删除,而不关心随机存取,则应使用list。

2. 常见关键字

1、 memset、memcpy和strcpy的区别

2、 struct和class的区别

3、 struct与union的区别

3. 指针vs引用vs解引用vs取地址

1、指针(*)

指针指向一块内存,指针保存的是内存的地址

2、引用(&)

引用是变量的别名,本质是引用该变量的地址

3、解引用(*)

解引用是取指针指向的地址的内容

4、取地址(&)

取地址是获得变量在内存中的地址

5、 区别

(1)引用使用是无需解引用,指针需解引用。

(2)引用不能为空,指针可以为空。

(3)引用在定义时被初始化一次,之后不可变;指针指向的值和本身的值是可变的,也就是说指针只是一块地址,地址里的东西可变。

(4)程序会给指针变量分配内存区域,而引用不需要分配内存区域。

4. 变量的申请与释放

5. 语法


文章作者: Gao
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Gao !
评论
  目录