笔试准备

C++基础

1、static作用

C:在函数体中,static局部变量在被调用过程中维持值不变

      在模块内,static变量可被模块内所用函数访问,但模块外函数不能使用,是一个本地的全局变量

      在模块内,一个static函数只能被这一模块内的其他函数调用

C++:

      在类中,static数据成员可实现多个对象之间的数据共享,是类的所有对象的共享成员,在内存中只占一份空间,如果改变其  值,则所有对象的这个数据成员的值都会改变。静态数据成员在程序开始运行时被分配空间,到程序结束之后释放,只要类中指定了静态数据成员,即使不定义对象,也会为静态数据成员分配空间。

      static成员函数,也是类的静态成员,非静态成员函数有this指针,而静态成员函数没有this指针,静态成员函数主要用来访问静态数据成员而不能访问非静态成员。

 

2、volatile关键字修饰举例

      中断服务程序中修改的供其他程序检测的变量

      多任务环境下各个任务间共享的变量

      存储器映射的硬件寄存器,因为每次对它的读写都可能有不同意义

 

3、const和#define

     Const常量是编译运行阶段使用,而define宏是预处理阶段展开

      const常量有具体的类型,编译时会执行类型检查

     const常量是在静态存储区中分配空间,在程序运行过程中内存中仅有一个拷贝,而define仅仅是展开,给出的是立即数,不分配内存

 

4、重载和覆盖

重载(overload)

函数或者方法有相同的名称,但参数列表不同(类型或顺序或数目)

重写(override)

重写存在于类中,子类重写从基类继承过来的函数,但函数名、返回值和参数列表都必须与基类相同

 

5、float类型变量判断是否为0

if(a >= -0.00001 && a <= 0.00001)

 

6、几种排序算法

A、冒泡排序

       一次比较两个元素,如果满足排序条件则交换它们的位置,如此重复直到没有需要再交换的元素

for(i = 0;i < len-1;i++)
{
  for(j = 0; j < len-1-i;j++)
  {
    if(arr[j] > arr[j+1])
    {
       int temp = arr[j+1];
       arr[j+1] = arr[j];
       arr[j] = temp;
    }
   }
}

B、选择排序

     在位排序的序列中找到最小(大)元素,存放到排序的起始位置,再从剩余未排序中继续寻找最小(大)元素放到已排序元素的末尾

for(int i = 0; i < len-1; i++)
{
   minIndex = i;
   for(int j = i+1; j < len; j++)
   {
      if(arr[j] < arr[minIndex])
        minIndex = j;
   }
   temp = arr[i];
   arr[i] = arr[minIndex];
   arr[minIndex] = tem;
}

C、插入排序

     通过构建有序序列,对于未排序序列数据,在已排序列中从后向前扫描,找到相应位置插入

for(int i = 1; i < len; i++)
{
  preIndex = i-1;
  current = arr[i];
  while(preIndex >= 0 && arr[preIndex] > current)
  {
    arr[preIndex + 1] = arr[preIndex];
    preIndex--;
  }
  arr[preIndex + 1] = current;
}

D、希尔排序

先将整个待排序的序列分割成若干个序列(选择一个增量),再分别进行插入排序

for(int gap = len/2;gap > 0;gap = gap/2)
{
  for(int i = gap; i<len;i++)
  {
     int j = i;
     int current = arr[i];
     while(j - gap >= 0 && current < arr[j-gap])
     {
       arr[j] = arr[j-gap];
       j = j - gap;
     }

     arr[j] = current;
  }

E、二分查找

int left = 0;
int right = length - 1;

while(left <= right)
{
   int mid = (right + left) / 2;
   if(nums[mid] == target)
     return mid;
   else if(nums[mid] < target)
     left = mid +1;
   else 
     right = mid -1;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值