面试问题整理

面试问题整理1

  1. C++中 deque的实现
    可以在两端高效插入、删除数据,支持随机访问

内部实现原理:利用分段数组,将元素存放在一个个大小固定的数组中,再有一个索引数组存放这些数组的首地址。
头部插入数据时,移动头部首地址索引即可,从后往前移动,如果当前数据段满了,则将数据保存在新创建的分段数组中,并将其首地址加入到索引数组中。
尾部插入时,顺序是从前到后,其他的一样。
在这里插入图片描述

  1. move() 函数
    move() 并不能移动任何东西,它唯一的功能是将一个左值强制转化为右值引用,继而可以通过右值引用使用该值。

一个对象被用作右值时,使用的是它的内容(值),被当作左值时,使用的是它的地址。
专门处理,用a初始化b后,就将a析构的情况。
拷贝构造函数中,对于指针,我们一定要采用深层复制,而移动构造函数中,对于指针,我们采用浅层复制。

移动构造函数的参数和拷贝构造函数不同,拷贝构造函数的参数是一个左值引用,但是移动构造函数的初值是一个右值引用。

参考: C++移动构造函数以及move语句简单介绍
左值与右值:

  1. 多重循环时,能放在外层的计算、判断放在外层;并且最长的循环放在内层,最短的放在外层,以减少CPU跨切循环层的次数;遵循行优先访问原则,与元素存储顺序一致。

  2. CPU包括四个部分:控制单元、运算单元、储存单元和时钟。

  3. 如何用队列实现栈
    队列是先进后出的顺序,而栈是先进先出,用队列实现栈可采用如下方法:参考Letcode225题

两个队列实现:q1为主队列,q2为辅助队列,将q1前q1.size()-1个元素弹出来,依次加入到q2中,最后将q2中的元素导回到q1中
一个队列实现:使队头对应栈头,队尾对应栈底,每次有新的元素入栈时:先在队尾加入新元素,并将前面q.size()-1个元素从队头取出依次放在队尾。

#include<iostream>
#include<vector>
using namespace std;
class QueuetoStack(){
public:
	queue<int> q;
	void push(int x){
		q.push(x);
		for(int i = 0; i < q.size()-1; i++){
			q.push(q.front());
			q.pop();
			}
	}
	int pop(){
		int top = q.front();
		q.pop();
		return top;
	}
	int top(){
		return q.front();
	}
	bool empty(){
		return q.empty();
	}
};
int main(){

return 0;
}
  1. C++多态原理
    概述:在父类的基函数前加关键字vitual,派生类中重写该函数,运行是程序会根据对象的类型动态调用相应的函数。

父类使用虚函数时,类内增加一个虚函数指针(vfptr)指向虚函数表(vftable);派生类重写父类的虚函数时,虚函数表会替换成子类的
基类的虚函数不用实际意义的实现,可以采用纯虚函数,添加 virtual func() = 0;即可

  1. push_back 与 emplace_back的区别

push_back()需要先构造临时对象,再将这个对象拷贝到容器的末尾,而emplace_back()则直接在容器的末尾构造对象,这样就省去了拷贝的过程。

计算机网络相关问题

  1. 百度网盘下载速度为什么是缓慢增加后稳定?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值