C++常见面试题

一、C++中的虚函数和纯虚函数的区别,以及它们的作用

虚函数和纯虚函数都是C++中用于实现多态的机制,它们的定义方式相同,都需要在函数声明前面加上关键字“virtual”。但是它们的实现方式和作用有所不同。
虚函数是一种允许在派生类中覆盖的基类函数。在使用基类指针或引用调用该函数时,会根据指向或引用的对象的类型来确定调用哪个版本的函数。如果在派生类中没有覆盖该函数,则会调用基类的版本。虚函数的作用是实现多态。
纯虚函数是没有实现的虚函数,需要在声明中使用“= 0”来标识。纯虚函数只能在抽象类中定义,而抽象类不能被实例化。派生类必须实现纯虚函数才能被实例化。纯虚函数的作用是定义一个接口,派生类必须实现该接口才能被实例化。
总的来说,虚函数是一种实现多态的机制,而纯虚函数是一种定义接口的机制。虚函数可以有实现,也可以没有实现,而纯虚函数必须没有实现。

二、C++中指针和引用的区别

定义形式:指针需要使用*来声明和定义,而引用则使用&来声明和定义。
初始化:指针可以先定义,后初始化,也可以在定义时直接初始化,而引用必须在定义时直接初始化。
操作符:指针可以使用*来访问指向的对象,也可以使用->来访问指向对象的成员。引用则可以直接使用.来访问对象的成员。
空值:指针可以被赋值为空值(nullptr),而引用必须总是指向一个合法的对象。
重载:指针可以进行算术运算(例如加减),而引用不可以。
可变性:指针可以被重新赋值为指向其他对象,而引用不能。
内存分配:指针可以通过new操作符动态分配内存,而引用则无法实现。
指针和引用都有其独特的应用场景。指针通常用于动态内存分配、函数参数传递、数据结构实现等场景;而引用通常用于函数参数传递、对象的别名等场景。

三、C++的标准模板库

容器(Containers)
STL提供了许多不同的容器,包括向量(vector)、链表(list)、双端队列(deque)、堆栈(stack)、队列(queue)、集合(set)和映射(map)等。每种容器都有不同的特点和适用场景。比如,向量适用于随机访问,而链表适用于插入和删除操作。
迭代器(Iterators)
迭代器是STL中的重要组成部分,它提供了对容器元素的遍历和访问。迭代器有五种类型,包括输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机访问迭代器。它们的特点和使用场景不同,可以根据具体情况选择合适的迭代器。
算法(Algorithms)
STL中的算法包括排序、查找、复制、填充、替换、合并、反转等等。这些算法可以用于各种容器类型,并且都是基于迭代器实现的。使用STL算法可以大大提高代码的可读性和可维护性。
函数对象(Function Objects)
函数对象是一种重载了()运算符的类,它可以像函数一样调用。STL中的函数对象可以用于算法中的排序、查找等操作,也可以用于容器中的比较、计数等操作。
适配器(Adapters)
适配器是STL中的一种特殊类型,用于将一个容器或迭代器转换成另一个容器或迭代器。比如,栈(stack)和队列(queue)就是基于双端队列(deque)实现的适配器。

四、STL容器的特点

vector: 动态数组,支持快速随机访问,尾部插入和删除操作效率高,但是在中间插入或删除元素的效率较低。
list: 双向链表,支持在头部和尾部插入和删除操作,支持任意位置插入和删除操作,但是随机访问效率较低。
deque: 双端队列,支持在头部和尾部插入和删除操作,支持随机访问操作。
stack: 栈,支持在顶部插入和删除操作,不支持随机访问操作。
queue: 队列,支持在尾部插入和头部删除操作,不支持随机访问操作。
priority_queue: 优先队列,支持在尾部插入和头部删除操作,并保证每次删除的元素都是优先级最高的元素。
set/multiset: 集合,支持快速查找、插入、删除元素,元素按照键值自动排序,set中每个元素的键值唯一,multiset中元素键值可以重复。
map/multimap: 映射,支持通过键值快速查找、插入、删除元素,元素按照键值自动排序,map中每个元素的键值唯一,multimap中元素键值可以重复。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值