C vector,list和deque的區別

2021-07-10 01:59:32 字數 506 閱讀 3948

vector封裝了陣列,擁有一段連續的記憶體空間,並且起始位址不變。因此vector可以非常好地支援隨機訪問,支援操作符過載和vector.at()。

但是由於它的記憶體空間是連續的,所以在vector中間進行插入和刪除會造成記憶體塊的拷貝和移動,複雜度是o(n)。 此外,當該陣列的記憶體空間不夠時,需要重新申請一塊足夠大的記憶體並進行記憶體拷貝,這些都降低了vector的效率。

但是在vector的尾部插入速度很快,所有vector有push_back()和pop_back()操作。

list封裝了雙向鍊錶,因此它的記憶體空間可以是不連續的,因此只能通過指標來進行資料訪問。list的隨機訪問變得非常沒有效率,需要遍歷所有元素,搜尋複雜度o(n)。

但是list可以很方便地支援任意位置的刪除和插入,只要修改指標的指向就行了。list相對vector占用記憶體較多。

deque 雙端佇列,在功能上合併了vector和list,隨機訪問方便,在內部可以方便地進行插入和刪除操作,可以在兩端進行push,pop。缺點是占用記憶體多。

STL容器 順序容器 佇列queue和deque

queue單向佇列,先進先出,也就是從尾部插入,頭部取出 操作 queueq 建立乙個int型空佇列q q.empty 判斷佇列是否為空,為空返回true q.push s 將變數s從隊尾入隊 q.pop 將隊頭元素彈出,佇列中不再有該元素 q.front 只返回隊頭元素,只是檢視,佇列中元素依然存...

和 區別和聯絡, 和 區別和聯絡

和 區別和聯絡,和 區別和聯絡,實際專案中,什麼情況用哪種?首先,和 的聯絡 共同點 和 都可以用作 邏輯與 運算子,都是雙目運算子。具體要看使用時的具體條件來決定。無論使用哪種運算子,對最終的運算結果都沒有影響。情況1 當上述的運算元是boolean型別變數時,和 都可以用作邏輯與運算子。情況2 ...

rpx和樣式和class和flex

5 style 靜態的樣式統一寫到 class 中。style 接收動態的樣式,在執行時會進行解析,請盡量避免將靜態的樣式寫進 style 中,以免影響渲染速度。例 6 class 用於指定樣式規則,其屬性值是樣式規則中類選擇器名 樣式類名 的集合,樣式類名不需要帶上.樣式類名之間用空格分隔。關於f...