list容器和forward list容器

2021-09-28 05:29:59 字數 947 閱讀 7527

list就是乙個雙向鍊錶,只支援雙向順序訪問,並且還是乙個環形鍊錶。因此list只需要乙個指標就可以完整表現整個鍊錶。如果讓指標node指向刻意置於尾端的乙個空白節點,node便能符合stl對於前閉後開的要求,成為last迭代器。

相較於vector的連續線性空間,list就顯得複雜許多,他的好處是每次插入或刪除乙個元素,就配置或釋放乙個元素的空間,因此list對於空間的運用絕對精準,一點兒空間也不浪費。而且,對於任何位置的元素的插入或元素移除,list永遠是常數時間。

list不再能像vector一樣以普通指標作為迭代器,因為其節點不保證在連續的儲存空間內,list迭代器必須有能力指向list的節點,並有能力進行正確的遞增、遞減、取值、成員訪問能操作。

由於list是乙個雙向鍊錶,迭代器必須具有前移、後移的能力。

list的插入和接合操作(splice)都不會造成原有的list迭代器失效,這在vector中是不成立的,甚至list的元素的刪除操作,也只有被刪除元素的那個迭代器失效,其他迭代器不受影響。在刪除某乙個元素之後,可以返回下乙個元素的迭代器。

注意:list無法使用stl演算法提供的sort,因為其需要乙個隨機訪問迭代器,需要使用其自帶的sort演算法(氣泡排序)

forward_list只支援單直接向迭代,功能上受到限制,但是單向鍊錶耗用空間少,某些操作更快。

slist的插入、擦除以及接合操作都不會造成原有迭代器失效。

當我們使用slist的時候要注意,因為stl的習慣是在插入操作的時候會將新元素插入於指定位置之前,而非之後,但是對於slist來說,沒有任何方便的辦法可以直接定位出前乙個元素,因此必須從頭找,換句話說,除了slist起點附近區域之外,在其他位置上採用insert和erase函式,都屬於不智之舉,這便是slist相較於list的缺點,為此slist提供了insert_after和erase_after。同樣基於效率考慮,不提供push_back,只有push_front函式,因此slist的元素順序和插入順序相反。

Scala容器之Set和List

scala中的集也分為兩種,一種是不可變集合,另一種是可變集合。1.1 不可變set集合 建立乙個空的不可變集 val var 變數名 set 型別 給定元素來建立乙個不可變集 val var 變數名 set 型別 元素1,元素2,元素3.建立set集合 scala val a set 1,1,2,...

list容器的插入和刪除

防止資料修改,只做讀取操作 void print const list int l cout endl list的插入和刪除 void test list int iterator l1beg l1.begin list int iterator beg l2.begin list int iter...

容器篇 list容器(上)

基於vs2017編譯通過 include include include using namespace std void printlist list int list 構造初始化 void test01 list int list5 arr,arr sizeof arr sizeof int 陣...