【后端面试重点总结】C++篇(二)

一、new和malloc之间的区别(表格参考代码随想录 (programmercarl.com)C++八股)

new/deletemalloc/free
本质属性运算符标准库函数
内存分配自动计算手工计算
类型安全是(int类型指针指向float会报错)不是(malloc类型转换为int分配double大小的空间不会报错)
关系new封装了malloc
其他会调用构造和析构只分配和释放内存
分配失败报bad_alloc异常分配失败报null
返回定义时类型的指针返回void* 指针需要类型转换

二、指针和引用

指针:存放某个对象的地址,本身就是变量,也有地址,可以有指向指针的指针。

引用:变量的别名,必须初始化,不存在指向空值的引用。

三、move,右值引用、移动构造函数(prime P473)

右值引用:&&,只能绑定一个将要销毁的对象,左值表示对象的身份,右值表示对象的值,变量是左值,字符常量是右值。

int &&rr1 = 42; // 是右值字符常量
int &&rr2 = rr1; // 不是右值表达式rr1是左值

move:可以获得绑定到左值上的右值引用,调用move意味着除了赋值和销毁,不再使用。

int &&rr3 = std::move(rr1); // ok

移动构造函数 :第一个参数是右值引用,额外参数有默认实参。移动构造函数不分配任何内存,接管内存后完成移动操作,移动后源对象将被销毁。

四、堆区和栈区的区别

堆:动态申请内存,从低地址到高地址增长。

栈:存储局部变量,参数值,从高地址向低地址连续空间。

五、数组和链表的区别,数组插入元素时间复杂度

数组:内存空间地址连续,提供随机访问,下标从0开始,从栈分配内存,查询简单。插入删除难。插入时间复杂度(头部O(n),尾部O(1))

链表:不按序存储,不可以随机访问,从堆上分配内存,查询难,插入删除简单。

六、十大排序算法代码及原理

1.0 十大经典排序算法 | 菜鸟教程 (runoob.com)

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值