C4

C++拷贝构造函数和赋值运算符有那些不同和相同点。

拷贝构造函数和赋值号的异同

同:都可以对对象的成员进行赋值

异:拷贝构造函数首先是一个构造函数,它调用的时候产生一个对象,是通过参数传进来的那个对象来初始化产生的对象。赋值是把一个对象赋值给一个原有的对象,而且还要检查一下两个对象是不是同一个对象,如果是的话就不做任何操作。

1. 使用C++赋值运算符应注意什么地方?

如果函数的返回值是一个对象,有些场合用引用传递替换值传递可以提高效率。而有些场合只能用值传递而不能用引用传递,否则会出错。

对于赋值函数,应当用引用传递的方式返回String对象。如果用值传递的方式,虽然功能仍然正确,但由于return语句要把 *this拷贝到保存返回值的外部存储单元之中,增加了不必要的开销,降低了赋值函数的效率。

对于相加函数,应当用值传递的方式返回String对象。如果改用引用传递,那么函数返回值是一个指向局部对象temp引用。由于temp在函数结束时被自动销毁,将导致返回的引用无效

12..函数前的staticvolatile变量中关键字的作用

 (3)static :常见的两种用途: 1>统计函数被调用的次数; 2>减少局部数组建立和赋值的开销.     1>、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。 2>、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。

    3>static用来修饰全局变量时,它就改变了全局变量的作用域,使其不能被别的程序extern,限制在了当前文件里,但是没有改变其存放位置,还是在全局静态储存区。

 

832位系统中,出现结构字节对齐的问题和大小端的问题的避免?

指定对齐值#pragma pack (value)时指定的对齐value

9.写一个函数判断系统是大端还是小端。若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1.

大端格式:在这种格式中,字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中

小端格式:与大端存储格式相反,在小端存储格式中,低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节

联合体union的存放顺序是所有成员都从低地址开始存放。

Int checkCPU ()

{

Union w

{

Int a;

Char b;

}c;

c.a=1;

return (c.b==1);

比较哈希表和平衡二叉树的特点,它们分别如用那些场合。

哈希表:哈希表查找速度比较快,可以时间复杂度为O(1)的情况下找到实现查找。但是要耗比较多的内存。所以比较适用于对查找速度要求比较高、且内存空间足够的时候

平衡二叉树:如果想在以后用二分法查找的时候查找速度比较快的话用建立平衡二叉树的方法()平衡二叉树支持动态的插入和查找,保证操作在O(height)时间,这就是完成了哈希表不便完成的工作,动态性。平衡二叉树/红黑树就是为了将查找的时间复杂度保证在O(logN)范围内。所以如果输入结合确定,所需要的仅仅是查询,则可以考虑使用哈希表,如果输入集合不确定,则考虑使用平衡二叉树/红黑树,保证达到最大效率。

 

6用C/C++编程,从1到100中取出10个不同的数,要求打印出所有可能的组合;

#include <iostream.h>

int source[100];

int dest[10]={0};

int index_source=0;

int index_dest=0;

int k=10;

int i=0;

int j=0;

void composition(int source[], int index_source, int dest[], int index_dest, int k)

{

     if(100-index_source==k)

     {

        for(i=0; i<index_dest; i++)

        {

              cout<<dest<<" ";

        }

        for(i=index_source; i<100; i++)

        {

              cout<<source<<" ";

        }

        cout<<endl;

        return;

     }

     if(index_source<100 && k==1)

     {

        for(i=index_source; i<100; i++)

        {

              for(j=0; j<index_dest; j++)

              {

                     cout<<dest[j]<<" ";

              }

              cout<<source<<endl;

        }

        return;

     }

     composition(source, index_source+1, dest, index_dest, k);

     dest[index_dest++]=source[index_source];

     composition(source, index_source+1, dest, index_dest, k-1);

}

 

void main()

{

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

        source=i;

     composition(source,0, dest, 0, 10);

}

 

如果系统堆栈很小,不能处理超过4级的函数调用,如何解决八皇后问题

 :#include <iostream>

#include <math.h>

#include <malloc.h>

using namespace std;

int *position; //放置的位置

int queen; //皇后数目

int count; //N种可能性//判断第n行是否放置皇后

bool SignPoint(int n)

{

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

{

  if (*(position+i) == *(position+n)) //该列已经放置过皇后了

   return false;

  if (abs(*(position+i) - *(position+n)) == n-i) //对角线已经放置过了

   return false;

}

return true;

}//设置皇后

void SetQueen(int n=0)

{

if (queen==n)

{

  //该处可以改成自己想要的显示方式

  printf("NO.%d: ",++count);

  printf("/n");

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

  {

   for (int j=0;j<queen;j++)

   {

    if (j == position[i])

    {

     printf("* ");

    }

    else

    {

     printf("0 ");

    }

   }

   printf("/n");

  }

  printf("/n");

  return;

}

else

{

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

  {

   position[n] = i;   if(SignPoint(n))//如果该位置放置皇后正确的话,则到下一行

   {

    SetQueen(n+1);

   }

  }

}

}int _tmain(int argc, _TCHAR* argv[])

{

cout<<"请输入皇后的总数:"<<endl;

cin>>queen;

position = (int*)malloc(sizeof(int));

SetQueen();

cout<<"摆放完毕"<<endl;

cin.get();

cin.get();

return 0;

}

 

三,编程与逻辑题

1自己写一个strstr

(单链表判断有无环,)

char* strstr(char* buf, char* sub)

{

char* bp;

char* sp;

If(!*sub)

return  buf;

while(*buf)

{bf=buf;

sp=sub;

do{    if(!*sp)

return buf;

}

while(*bp++==*sp++)

buf+=1;

}

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值