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)程序会给指针变量分配内存区域,而引用不需要分配内存区域。