《STL原始碼剖析》 序列式容器(二)list容器

2021-08-06 03:33:35 字數 1359 閱讀 8743

list概述:

相較於vector的連續線性空間,list就有點複雜了,但複雜有複雜的好處,每次插入或刪除乙個元素,就配置或釋放乙個元素。因此list不存在浪費空間的問題。而且對於任何位置插入或釋放元素,時間是常值。

list的迭代器

首先list的節點(node)是乙個雙向鍊錶。另外list不能像vector以普通指標作為迭代器,因為其節點不保證在空間中連續。所以list的迭代器要能夠指向list的節點,並且可以進行正確的遞增、遞減、取值和成員訪問等操作。所以迭代器要有前移、後退的能力,所以list的迭代器為雙向迭代器。

list有乙個重要性質:插入操作和接合操作都不會造成list迭代器的失效。這是vector所不具有的。

所以說list迭代器的設計也是非長麻煩的

template

struct __lisr_iterator

list資料結構sgi list不僅是乙個雙向鍊錶,還是乙個環形鍊錶,只需乙個指標就可完整表現整個鍊錶。讓指標指向刻意置於尾端的空白點,node便可符合stl前開後閉的特點,完成last迭代器,因此輕易完成返回開始迭代器和最後面的迭代器。

list的構造和記憶體管理

list預設使用alloc維空間配置器,有專屬空間配置器,每次配置、釋放、構造和銷毀乙個空間。

list元素的操作

list對於元素的操作有很多:

push_front()

push_back()

iterator erase()

pop_front()

pop_back()

clear() //清空所有節點

remove() //移除所有某個特定值

unique() //移除數值相同的連續元素

另外list內部有乙個遷移操作(transfer):將連續範圍的元素遷移到到某個特定位置之前,有了這個操作,可以為其他複雜的操作(splice(接合)、merge(合併,之前排過序),reverse(逆向重置))奠定良好的操作

list不能使用stl的演算法sort(),必須自己的成員函式sort().採用快速排序。

《STL原始碼剖析》 序列式容器

stl原始碼剖析 前言 所謂的序列式容器,其中的元素都可序,但未必有序,c 本身提供了乙個序列式容器array,stl 提供了vector,list,deque,srack,queue,priority queue等 一.使用reverse 函式提前設定容量大小 1.1 提前設定的原因 對於vect...

STL原始碼剖析之序列式容器

最近由於找工作需要,準備深入學習一下stl原始碼,我看的是侯捷所著的 stl原始碼剖析 之所以看這本書主要是由於我過去曾經接觸過一些台灣人,我一直覺得台灣人非常不錯 這裡不涉及任何政治,僅限個人感受 在技術上他們比較嚴謹,在為人處世上也非常謙虛,所以一些台灣的技術資料我覺得是值得一看的。想要學習st...

STL原始碼剖析 序列式容器之deque

deque概述 deque是一種雙開口的連續線性空間,可以在頭尾兩端分別做元素的插入和刪除操作 deque沒有容量的概念,它是動態地以分段連續空間組合而成,隨時可以增加一段新的空間並鏈結起來 deque的中控器 deque由一段一段的定量連續空間構成 一旦有必要在deque前端或尾端增加新空間,便配...