c 筆試面試3

2021-07-16 23:21:03 字數 3550 閱讀 2558

1、

c++ stl 的實現:

1.vector  底層資料結構為陣列 ,支援快速隨機訪問

2.list    底層資料結構為雙向鍊錶,支援快速增刪

3.deque   底層資料結構為乙個**控制器和多個緩衝區,詳細見stl原始碼剖析p146,支援首尾(中間不能)快速增刪,也支援隨機訪問

4.stack   底層一般用23實現,封閉頭部即可,不用vector的原因應該是容量大小有限制,擴容耗時

5.queue   底層一般用23實現,封閉頭部即可,不用vector的原因應該是容量大小有限制,擴容耗時

6.45是介面卡,而不叫容器,因為是對容器的再封裝

7.priority_queue 的底層資料結構一般為vector為底層容器,堆heap為處理規則來管理底層容器實現

8.set       底層資料結構為紅黑樹,有序,不重複

9.multiset  底層資料結構為紅黑樹,有序,可重複 

10.map      底層資料結構為紅黑樹,有序,不重複

11.multimap 底層資料結構為紅黑樹,有序,可重複

12.hash_set 底層資料結構為hash表,無序,不重複

13.hash_multiset 底層資料結構為hash表,無序,可重複 

14.hash_map      底層資料結構為hash表,無序,不重複

15.hash_multimap 底層資料結構為hash表,無序,可重複 

vector表示一段連續的記憶體區域,隨機訪問效率很高,因為每次訪問離起始處的位移都是固定的,但是在隨意位置插入刪除元素效率很低,因為它需要將後面的元素複製一遍。 list表示非連續的記憶體區域,並通過一對指向首尾元素的指標雙向鏈結起來,從而允許向前和向後兩個方向進行遍歷。在list的任意位置插入和刪除元素的效率都很高:指標必須被重新賦值,但不需要用拷貝元素來實現移動。他對隨機訪問支援不好,需要遍歷中間的元素。每個元素有兩個指標的額外空間開銷。 deque(雙端佇列,發音為'deck')也表示一段連續的記憶體區域,但是他支援高效的在其首部插入和刪除元素。 選擇順序容器型別的一些準則: 如果我們需要隨機訪問乙個容器,則vector要比list好得多。 如果我們一直要儲存元素的個數,則vector又是乙個比list好的選擇。 如果我們需要的不只是在容器兩端插入和刪除元素,則list顯然比vector好。 除非我們需要在容其首部插入和刪除元素,否則vector要比deque好。

2、小端機器的資料高位位元組放在高位址,低位位元組放在低位址。

char array[12] = ; 

1,char一位元組,直觀呈現的結果為:0x08-07-06-05-04-03-02-01

(從後到前下標為0-7);

2,short兩位元組,直觀呈現 的結果 為: 0x0807-0605-0403-0201 

(從後到前

下標為0-3) :

*pshort從0開始,所以0x201;

*(pshort+2)從2開始,所以0x605;

3,int64八字節,直觀呈現 的結果 為 0x0807060504030201 

(從後到前

下標為0) :

*pint64從0開始,所以0x807060504030201;

4,int四位元組,直觀呈現為0x08070605-04030201

(從後到前

下標為0-1) :

*(pint+2))從2開始,但是最多隻到下標1,後面位置預設為0。

3、有如下c++**:

1

2

3

4

5

6

7

8

9

structa

virtualvoidbar()

a()

};

structb:a

voidbar()

};

那麼 1

2

3

a *p=newb;

p->foo();

p->bar();

輸出為:

barfoob_bar
a *p=newb;// a類指標指向乙個例項化物件b, b類繼承a類,先呼叫父類的無參建構函式,bar()輸出bar,b類沒有自己顯示定義的建構函式。

p->foo();//執行b類裡的foo()函式,因為foo不是虛函式,所以直接呼叫父類的foo函式,輸出foo

p->bar();//執行b類的bar()函式, 該函式為虛函式,呼叫子類的實現,輸出b_bar

4、大端機與小端機:分別對應高尾端與低尾端

對於字串11223344高尾端指尾端是高位即44,所以儲存為11 22 33 44

低尾端指尾端在低位,即11,所以儲存44 33 22 11.

5、組合

我們知道,在乙個類中可以用類物件作為資料成員,即子物件(詳情請檢視:

c++有子物件的派生類的建構函式

)。實際上,物件成員的型別可以是本派生類的基類,也可以是另外乙個已定義的類。

在乙個類中以另乙個類的物件作為資料成員的,稱為類的組合(composition)。

例如,宣告professor(教授)類是teacher(教師)類的派生類,另有乙個類birthdate(生日),包含year,month,day等資料成員。可以將教授生日的資訊加入到professor類的宣告中。如:

class

teacher

//教師類

;class

birthdate

//生日類

;class

professor

:public teacher //教授類

;

類的組合和繼承一樣,是軟體重用的重要方式。組合和繼承都是有效地利用已有類的資源。但二者的概念和用法不同。通過繼承建立了派生類與基類的關係,它是一種 「是」的關係,如「白貓是貓」,「黑人是人」,派生類是基類的具體化實現,是基類中的一 種。通過組合建立了成員類與組合類(或稱復合類)的關係,在本例中birthdate是成員類,professor是組合類(在乙個類中又包含另乙個類的物件成員)。它們之間不是『『是」的 關係,而是「有」的關係。不能說教授(professor)是乙個生日(birthdate),只能說教授(professor)有乙個生日(birthdate)的屬性。

professor類通過繼承,從teacher類得到了num,name,age,***等資料成員,通過組合,從birthdate類得到了year,month,day等資料成員。繼承是縱向的,組合是橫向的。

3 C語言面試筆試 控制結構

現在進入c語言的控制結構,這篇完成後,c語言的基礎操作也就算完結了。控制語句主要分為選擇控制語句和迴圈控制語句。選擇控制語句主要包括if else 結構,以及switch結構。這裡我就不再多說,下面點出一些容易出錯的地方。注意switch後面圓括號內的 表示式 的值只能是整數或字元值,不允許是實數和...

c c 筆試面試題 3

1.以下三條輸出語句分別輸出什麼?c易 char str1 abc char str2 abc const char str3 abc const char str4 abc const char str5 abc const char str6 abc cout boolalpha str1 st...

C 面試筆試題

看一下這是一些c 面試的筆試,對於學習c 的你也許也是個考驗吧,有時間做做吧 給定九個數,例如 1,3,3,5,6,7,8,8,9計算出這九個數的排列的種數。需要考慮重複情況,如果給定9個1,則只有一種結果。限制 不能使用stl庫 要求 完成函式 unsigned int foo unsigned ...