c++中 deque的實現
可以在兩端高效插入、刪除資料,支援隨機訪問
內部實現原理:利用分段陣列,將元素存放在乙個個大小固定的陣列中,再有乙個索引陣列存放這些陣列的首位址。
頭部插入資料時,移動頭部首位址索引即可,從後往前移動,如果當前資料段滿了,則將資料儲存在新建立的分段陣列中,並將其首位址加入到索引陣列中。
尾部插入時,順序是從前到後,其他的一樣。
move() 函式
move()
並不能移動任何東西,它唯一的功能是將乙個左值強制轉化為右值引用,繼而可以通過右值引用使用該值。
乙個物件被用作右值時,使用的是它的內容(值),被當作左值時,使用的是它的位址。
專門處理,用a初始化b後,就將a析構的情況。
拷貝建構函式中,對於指標,我們一定要採用深層複製,而移動建構函式中,對於指標,我們採用淺層複製。
移動建構函式的引數和拷貝建構函式不同,拷貝建構函式的引數是乙個左值引用,但是移動建構函式的初值是乙個右值引用。
參考: c++移動建構函式以及move語句簡單介紹
左值與右值:
多重迴圈時,能放在外層的計算、判斷放在外層;並且最長的迴圈放在內層,最短的放在外層,以減少cpu跨切迴圈層的次數;遵循行優先訪問原則,與元素儲存順序一致。
cpu包括四個部分:控制單元、運算單元、儲存單元和時鐘。
如何用佇列實現棧
佇列是先進後出的順序,而棧是先進先出,用佇列實現棧可採用如下方法:參考letcode225題
兩個佇列實現:q1為主佇列,q2為輔助佇列,將q1前q1.size()-1個元素彈出來,依次加入到q2中,最後將q2中的元素導回到q1中
乙個佇列實現:使隊頭對應棧頭,隊尾對應棧底,每次有新的元素入棧時:先在隊尾加入新元素,並將前面q.size()-1個元素從隊頭取出依次放在隊尾。
#include
#include
using
namespace std;
class
queuetostack()
}int
pop(
)int
top(
)bool
empty()
};intmain()
c++多型原理
概述:在父類的基函式前加關鍵字vitual,派生類中重寫該函式,執行是程式會根據物件的型別動態呼叫相應的函式。
父類使用虛函式時,類內增加乙個虛函式指標(vfptr)指向虛函式表(vftable);派生類重寫父類的虛函式時,虛函式表會替換成子類的
基類的虛函式不用實際意義的實現,可以採用純虛函式,新增virtual func() = 0;
即可
push_back 與 emplace_back的區別
push_back()需要先構造臨時物件,再將這個物件拷貝到容器的末尾,而emplace_back()則直接在容器的末尾構造物件,這樣就省去了拷貝的過程。
面試問題整理
所謂事務,就是提供一種機制,將乙個活動涉及的所有操作納入到乙個不可分割的執行單元,只要其中任何乙個操作執行失敗,都將導致整個事務的回滾。簡單的說,就是一種 要不什麼都不做,要麼做全套 機制。資料庫本地事務 acid原則 a atomicity 原子性 c consistency 一致性 i isol...
面試問題整理
最近面試,遇到了不少題目,為今後的再面試做準備,特收集記錄於此 一 關於管理方面的 1 如何構建比較完整的測試體系框架,可以從哪些方面入手?思路 測試技術體系建設 測試管理支撐 主要從團隊組織 環境建設 標準制定 人員培養 配置管理 工作流程 a 軟體測試管理體系建設可以從測試的總體規程 需求跟蹤管...
HDFS面試問題整理
1 hdfs讀取流程,小檔案處理 2 hdfs的資料壓縮演算法 3 datanode什麼情況下不會進行備份 4 hdfs的體系結構 5 hdfs的儲存機制 6 hdfs的基本原理 7 hdfs上傳檔案的流程 8 hadoop1.0和2.0hdfs的block各為多少?9 hdfs為什麼不太適合小檔案...