C++面试题整理
1.STL及数据结构(注意效率与复杂度)
vector和list的内部实现是什么?分别适用于什么应用场景?
vector随机访问的时间复杂度是多少?怎么优化vector的查找速度?
vector扩容的过程?
怎么彻底清空vector?
vector怎么查找元素?如果是一个结构怎么查找一个vector结构中的指定元素?(find find_if)
map查找的复杂度?
map的底层是怎么实现的?map与hashmap的区别?什么时候应该使用map什么时候应该使用hashmap?
常见排序算法及其时间和空间复杂度?桶排序有了解的吗?
给定一个场景,选择一种合适的容器?
怎么定义一个环形队列?怎么判断环形队列的空与满?
2.C++中引用和指针的区别?
引用是对象的别名, 操作引用就是操作这个对象, 必须在创建的同时有效得初始化(引用一个有效的对象, 不可为NULL),初始化完毕就再也不可改变, 引用具有指针的效率, 又具有变量使用的方便性和直观性, 在语言层面上引用和对象的用法一样, 在二进制层面上引用一般都是通过指针来实现的,只是编译器帮我们完成了转换。 之所以使用引用是为了用适当的工具做恰如其分的事, 体现了最小特权原则。
3.在C++程序中调用被C编译器编译后的函数,为什么要加extern“C”?
extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,其声明的函数和变量可以在本模块或其它模块中使用。 通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。
4.简述strcpy、sprintf 与memcpy 的区别
三者主要有以下不同之处:
(1)操作对象不同,strcpy 的两个操作对象均为字符串,sprintf 的操作源对象可以是多种数据类型,
目的操作对象是字符串,memcpy 的两个对象就是两个任意可操作的内存地址,并不限于何种数据类型。
(2 )执行效率不同,memcpy 最高,strcpy 次之,sprintf 的效率最低。
(3 )实现功能不同,strcpy 主要实现字符串变量间的拷贝,sprintf 主要实现其他数据类型格式到字
符串的转化,memcpy 主要是内存块间的拷贝。
说明:strcpy、sprintf 与memcpy 都可以实现拷贝的功能,但是针对的对象不同,根据实际需求,来选择合适的函数实现拷贝功能。