4、const在c++與c中的用法與區別(包括用在函數與變量前)
這裏就不多說了,特別指明一點是,const成員函數對一般的數據成員是不能改變的,只有一種特例,就是mutable修飾的數據成員,這個也有被問到。
5、說一下函數重載的好處,在什麼時候要用函數重載,如果返回類型不同是不是重載
函數重載就是將語義,功能相似的幾個函數用同一個名字表示,便於記憶,提高函數的易用性(C++語言採用重載機制的另一個理由是:類的構造函數需要重載機制)。重載函數只有參數不同,返回值必須是一樣,編譯器根據參數爲每個重載函數產生不同的內部標識符。
6、自定義int strlen(char *p),函數體內不能有任何變量申明,也不能使用循環
Int strlen(char *p)
{
If(NULL==p|| p==’/0’)
Return 0;
Else
Retun 1+strlen(p-1);
}
7、有n階臺梯,一個人一步可以走一梯或者走二梯,問有多少種走法,寫出程序來
一般的想法是用遞歸,第n階的走法,一定是到第n-1階的走法,與n-2階走法的和,所以何師兄立即就問,你還記得這是數學中什麼有名的結構麼,還好當助教有看到過這個,其實就是一個斐波那奇數列。
8、菲波那其數的程序實現,寫出程序來,爲什麼你不用遞歸,要用for語句,用遞歸他的時間複雜度是多少
然後立刻讓我寫出程序來,我選擇了用數組做,而不用遞歸,因爲遞歸時間複雜度太大。
long fib(int n)
{
int t1=0 ,t2=1 ,t3;
For(int i=0 ;i<n ;i++)
{
t3 = t1 + t2 ;
t1 = t2;
t2 = t3
}
Return t3;
}
不過說實在,說起什麼排序算法,遞歸的時間複雜度,就暈了,當年ACM集訓的東西,全都還給劉老大了,唉~~是得補補了
9、函數模板是什麼,爲什麼要使用模板,怎麼樣進行模板實例化
這個就不多講了哈。
10、快速排序是什麼,描述一下過程,時間複雜度是多少,最壞和最差情況下,時間複雜度又是多少
冒泡,選擇排序什麼的,估計是太簡單,所以沒有問,簡單簡介了一下快速排序的原理。又問到時間複雜度是多少,truly,這個又是我蒙的,人品再一次爆發了,又蒙對了。不過蒙也是要有道理的,要分析,雖然不知道,到底是怎麼出來的,不過即不是n平方,也不是n,一定以前見過的這個這麼怪異的值了。因爲無論是否交換,快速排序比較的次數都是一樣的,所以最壞最差情況下,應該一樣。
11、list和vector的區別,如果向vector的puch_back時,數據已經超過開始分配的空間,系統會怎麼樣
這個說實在不知道,不過猜了一個,會新分配內存空間,居然猜對了。
12、自定義棧結構,遵守前進後出的原則,可是必須能知道當前棧中最小值(不要保存最小值,因爲最小值如果出棧以後,還要知道次小值)
這個題討論的最久,因爲我設計了兩種算法,雖然都可以實現,似乎效率不高,後來何師兄說了一種 算法導論 中提到的方法,的確比我用索引來得快。
13、用英文說明爲什麼你要來這個公司和部門
14、你現在作的項目是什麼,你負責什麼
15、用英文說明你的優點,並舉例說明