三七互娱2018笔试题

来源:互联网 发布:淘宝刷一个单多少钱 编辑:程序博客网 时间:2024/05/16 19:32

三七互娱,一个小时,十个简答题,也许是想用时间先刷掉一批人吧。

一、指针和引用的区别?

(1)指针可以不初始化,引用必须初始化。

(2)指针可以改变其指向,引用一经引用,无法改变。

(3)指针有二级指针,引用没有二级引用(C++11标准除外)。

(4)sizeof一个指针,32位机器下为4字节,sizeof一个引用,求的是引用对象的字节数。

指针和引用在汇编上都是一样的,都是在栈上开辟一块内存,用于存放指向对象的地址。只不过是引用直接将引用对象的地址放入寄存器中,而指针则是先将自己的地址放进去,取得指向对象的地址。

二、单链表的逆置?

 typedef struct Node
{
int data;
struct Node *next;
}Node,*List;

void ListRevers(List head)
{
assert(head!= NULL);                                                                    
if(head==NULL || head->next==NULL)
{
return ;
}
Node *p = head->next;                                                               
Node *q;
head->next = NULL;                                                                       
while(p != NULL)                                                                           
{
q = p->next;                                                                             
p->next = head->next;                                                              
head->next = p;
p = q;
}
}
三、内存分配的方式有几种?

静态存储区 栈 堆 的内存分配
1,从静态存储区域分配内存。程序编译的时候内存已经分配好了,并且在程序的整个运行期间都存在,例如全局变量。
2,在栈上创建。在执行函数时,函数内局部变量的存储单元可以在栈上创建,函数结束时这些存储单元自动被释放。
处理器的指定集中有关于栈内存的分配运算,因此效率比较高,但是分配的内存容量有限。
3,在堆上分配内存,亦称动态内存分配,程序在运行的时候用malloc函数或new运算符申请任意大小的内存,程序员
要用free函数或delete运算符释放内存。动态内存使用非常灵活,但问题也很多。 

四、STL中的容器有哪些,他们的特征?

顺序容器:vector,list,deque

关联容器:set,multiset,map,multimap

容器适配器:queue,stack

vector的底层是一个动态开辟的可变长的数组,他的内存是连续的。定义一个vector,在32位机器,VS下,栈上的大小为20字节,五个指针。bool类型的话为24字节。它所指向的堆上vector数组的初始大小为0,每次呈二倍增长方式,VS其实不为2。他适合查找和以及尾插,尾删数据。

list的底层是一个带头结点的双链表,他默认开辟一个头结点。可以使用splice方法,将一个链表上数据切下来链到另一个链表上。

deque底层是一个动态开辟的二维数组,默认开辟的大小为,int size = 4096 > sizeof(Ty) ? 4096/sizoef(Ty) : 1。

五、20个人轮流报数,数到3的人出局,求出局的序列?

void fun()

{

vector<int> ve(20,0);

int num = 0;

while(num < 20)

{

for(int i = 0; i < 20; ++i)

{

if(ve[i] == 0)

num++;

if(num == 3)

{

ve[i] = 1;

num = 0;

cout<<i<<" ";

}

}

}

cout<<endl;

}

六、写出String类的构造,拷贝构造,赋值,析构函数?

class String

{

public:

String(const char *str)

{

if(str == NULL)

{

m_data = new char[1];

m_data = '\0';

}

else

{

m_data = new char[strlen(str) + 1];

strcpy(m_data,str.m_data);

}

}

String(const String &it)

{

m_data = new char[strlen(it.m_data) + 1];

strcpy(m_data,it.m_data);

}

~String()

{

delete []m_data;

m_data = NULL;

}

String &operator=(const String  &it)

{

if(this == &it)

{

return *this;

}

delete []m_data;

m_data = new char[strlen(it.m_data) + 1];

strcpy(m_data,it.m_data);

return *this;

}

private:

char *m_data;

};

其次还有一道数据库的题印象颇深,剩余的题就没有什么了。

原创粉丝点击