筆試準備

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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章