牛客网练习,某公司校园招聘。大数字 2014年
第一题:在函数F中,本地变量a和b的构造函数(constructor)和析构函数(destructor)的调用顺序是: ( a构造 b构造 b析构 a析构 )
Class A;
Class B;
void F() {
A a;
B b;
}调用函数的时候用栈来记录局部的变量和对象。按照变量声明的顺序入栈,
如果是对象就按顺序调用构造函数,函数调用结束后,后进栈的先弹出,
对于对象就是后声明的对象先调用析构函数。
第二题:假定指针变量p定义为“int *p=new int(100);”,要释放p所指向的动态内存,应使用语句( A )
delete p;
delete *p;
delete &p;
delete []p;解答:
小括号是赋值,[]才是数组,题目中是 new int(100);
int* p = new int (100) 是创建一个int型的内存,并赋值为100;
int *p = new int[100] 是创建100个int型的内存;
一般用法是new一个数组的话一般是delete [] 其他的直接delete即可。
但是其实对于内置数据类型,其实是delete[] 和delete都可以的。第三题: 选择填空,选D
#include
void test(void *data) {
unsigned int value = (此处应填入)
printf("%u", value);
}
using namespace std;
int main() {
unsigned int value = 10;
test(&value);
return 0;
}
A. *data
B. (unsigned int)(*data)
C. (unsigned*)data
D. *((unsigned int *)data)
解释:
第一行中 void test(void *data)
注意,参数类型是void, 所以先要进行指针转换:(unsigned int *)然后再取值。第四题: 在C++, 下列哪一个可以做为对象继承之间的转换,选B
static_cast
dynamic_cast
const_cast
reinterpret_cast解释:
dynamic_cast :
继承体系安全向下转型或跨系转型;找出某对象占用内存的起始点
static_cast:
同旧式C转型,如int 到double
const_cast:
常用于去除某个对象的常量性
reinterpret_cast
不具备移植性,常见用途是转化函数指针类型第七题: 用二分法查找长度为10的、排好序的线性表,查找不成功时,最多需要比较多少次?
答案:4次 2^4=16
解释:二分查找,可以用二叉判定树,
依据:查找不成功的次数不超过判定树的深度,而树的深度为(下取整) |_log2n_| +1第八题: 辗转相除法,假设x,y中最大的那个数的长度为n,x>y,
规定基本运算时间复杂度为O(1),那么该程序的时间复杂度为的时间复杂度? O(logy)解释:根据定理 如果 m > n , m mod n < m/2 ,
每次递归y的变为原来的1/2不到,所以递归次数小于logn,其最坏时间复杂度为O(logn);第九题: 一棵有124个叶节点的完全二叉树,最多有( 248 )个节点。
解释: 由题目可知124个叶节点,由定理可知 度为2的节点有 123个。
二叉树
牛客网练习,某公司校园招聘。大数字 2014年
最新推荐文章于 2021-08-04 14:12:14 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)