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
struct
a
virtual
void
bar()
a()
};
struct
b:a
void
bar()
};
那麼 1
2
3
a *p=
new
b;
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 ...