日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STL源码剖析 序列式容器 slist

發(fā)布時(shí)間:2023/12/13 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STL源码剖析 序列式容器 slist 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
  • STL l i s t 是個(gè)雙向鏈表(double linked lis t) 。SGI STL提供了一個(gè)單向鏈 表 (single linked lis t) , 名 為 slist
  • ?s l i s t 和 l i s t 的主要差別在于,前者的迭代器屬于單向的Forwardlterotor, 后者的迭代器屬于雙向的Bidirectional Iterator.為此,s l i s t 的功能自然也就受到許多限制。不過,單向鏈表所耗用的空間更小,某些操作更快,不失為另一種選擇。
  • list使用雙向的Bidirectional Iterator可以雙向移動(dòng)
  • slist使用單向的Forwardlterotor只可以單向移動(dòng)
  • s l i s t 和 l i s t 共同具有的一個(gè)相同特色是,它們的插入(insert)、移除 (erase) 、接 合 (splice) 等操作并不會(huì)造成原有的迭代器失效(當(dāng)然啦,指向被 移除元素的那個(gè)迭代器,在移除操作發(fā)生之后肯定是會(huì)失效的)
  • 插入操作會(huì)將新元素插入于指定位置之前,而非之后。
  • 然而作為一個(gè)單向鏈表,s lis t沒有任何方便的辦法可以回頭定出前一個(gè)位置, 因此它必須從頭找起。換句話說,除了 s lis t起點(diǎn)處附近的區(qū)域之外,在其它位置 上采用insert或 erase操作函數(shù),都屬不智之舉。這便是s lis t相較于l i s t 之下的大缺點(diǎn)。為此,s l i s t 特別提供了 insert_after ()和 erase_after ()供靈活運(yùn)用。
  • 基于同樣的(效率)考慮,s l i s t 不提供push_back(),只提供push_front ()。因此s lis t 的元素次序會(huì)和元素插入進(jìn)來的次序相反。list插入元素每次都會(huì)在頭部執(zhí)行,因此速度較快,但是插入元素的順序和list中元素的存儲(chǔ)順序相反。

?

?

?

  • ?注意,比較兩個(gè)Slist迭代器是否等同時(shí)(例如我們常在循環(huán)中比較某個(gè)迭代器是否等同于Slist .end()),
  • 由于 _ slist_iterator 并未對 operator==實(shí) 施重載,所以會(huì)調(diào)用_slist_iterator_base::operator==□ 根據(jù)其中之定義, 我們知道,兩 個(gè) Slist迭代器是否等同,視 其 一 slist_node_base* node是否等同而定。

?

?

?

?

?

  • ?首先依次序把元素9,1,2,3,4插入到s l i s t ,實(shí)際結(jié)構(gòu)呈現(xiàn)如圖4-26。 接下來搜尋元素1 ,并將新元素99插入進(jìn)去,如圖4-27。
  • 注意,新元素被插入在插入點(diǎn)(元素1 )的前面而不是后面。
  • 接下來搜尋元素3 ,并將該元素移除,如圖4-28.

?

?

?

總結(jié)

以上是生活随笔為你收集整理的STL源码剖析 序列式容器 slist的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。