C primer 順序容器(3)

2021-07-23 09:28:55 字數 921 閱讀 4640

前幾篇主要是把vector與string放在一起討論,本篇主要是將list與forward_list放在一起比較

list故名思義就是列表的意思。

首先我們來看看列表與我們之前討論的vector和string有什麼區別。

2.正因為這個特點,如果list要訪問容器中的某一元素,就得遍歷整個容器。使得訪問元素實現較為費時。

3.但又因為元素之間空間的先後順序沒那麼嚴格的要求,它在元素的增加與刪除就會顯得比較智慧型(把不要的那節砍掉然後再把繩子接上就好了)也就是只要改動目標元素的前乙個與後乙個的資訊就可以了。這個在頻繁對任意位置的元素進行操作的時候就顯得很有優勢。

現在我們來看看list與forward_list的差別

list是雙向列表,何為雙向列表?就是可以雙端訪問容器元素,也就是從尾部或者首部都可以對元素進行新增或者刪除。(此處,讀者可以認為是前後大門都敞開)

而forward_list字面意思就是前向鍊錶,也就是單向鍊錶。也就是只開了一扇大門,所有元素必須通過這個前大門進去。所以該容器並沒有push_back或者pop_back系列的成員函式。

那list系列的容器的元素是怎麼儲存的呢?

forward_list每個單元存放著指向下乙個元素的鏈結。就好像幾個好朋友並沒有直接住隔壁,而是大家都知道下一家的位址,那麼我要找第5家的人,我只能找到第一家要到第二家位址再找到第二家要到第三家位址.....最後找到第5家。從這個描述中,相信大家隔著螢幕也能感受到這個隨機訪問元素的深深的麻煩吧!

由於這種儲存機理,當新增或者刪除乙個元素時,在新增或刪除之前的元素儲存的那個連線(可以理解成位址)就失效了,就是改變了。

以forward_list為例,我們要刪除乙個元素,那麼我們就要改變前乙個元素的鏈結。為了能更好的實現,forward_list中定義了insert_after、emplace_after、erase_after

具體操作可以參考:

《C primer》 順序容器

順序容器 vector 支援快速隨機訪問 list 支援快速插入 刪除 deque 雙端佇列 順序容器介面卡 stack 後進先出 lifo 棧 queue 先進先出 fifo 棧 priority queue 有優先順序管理的佇列 容器元素型別必須滿足條件 1.支援賦值運算,2.物件可以賦值 因為...

C primer 順序容器

順序容器 vector deque list 介面卡 根據原始容器型別所提供的操作,通過定義新的操作介面,適應基礎的容器型別。容器元素初始化 cc 預設建構函式 cc n n個值初始化,只適用於順序容器,必須給出缺省建構函式 cc n,t n個t只適用於順序容器,可以不給,但要給出 t t 建構函式...

C Primer 筆記 順序容器

將單一元素型別聚集起來成為容器,然後根據位置來儲存和訪問這些元素 vectorivec listslist dequedstr vector 支援快速隨機訪問 list 支援快速插入 刪除 deque 雙端佇列 stack 後進先出 lifo 棧 queue 先進先出 fifo 佇列 priorit...