侯捷STL 容器List

2021-10-04 19:05:35 字數 2853 閱讀 8015

一、使用list

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

"public_func.h"

using

namespace std;

namespace namespace_list

; clock_t timestart =

clock()

;//測試生成資料時間

for(

long i =

0; i < maxsize; i++

)catch

(const std::exception& e)

} cout <<

"time(ms) = "

<<

(clock()

- timestart)

<< endl;

cout <<

"list.size() = "

<< list.

size()

<< endl;

cout <<

"list.max_size() = "

<< list.

max_size()

<< endl;

cout <<

"list.front() = "

<< list.

front()

<< endl;

cout <<

"list.back() = "

<< list.

back()

<< endl;

//測試qsort和bsearch的時間

string target =

get_a_string_target()

; timestart =

clock()

;//find查詢

else

}//sort + bsearch}}

intmain

(int argc,

char

*ar**)

二、list::sort()list排序需要自己自帶sort進行排序,無法使用全域性排序函式::sort進行排序

全域性排序函式::sort實現:

template

<

typename _randomaccessiterator>

inline

void

sort

(_randomaccessiterator __first, _randomaccessiterator __last)

list排序函式sort實現:

三、容器list原始碼解析

雙向迴圈鍊錶,前閉後開

//list實現

template

<

classt,

class

alloc

=alloc>

class

list

;//節點結構

template

<

class

t>

struct __list_node;}

;

g2.9版本:sizeof(list) = sizeof(link_type*) = byte

g4.9版本:sizeof(list) = 8 byte

四、list::iterator詳解

//迭代器

template

<

classt,

class

ref,

class

ptr>

struct __list_iterator

//過載*

pointer operator

->()

const

//過載->

self operator++(

int)

//過載後++ 備註: self tmp = *this; 不會喚起過載*函式,會執行拷貝建構函式

self&

operator++(

)//過載前++ 備註: 後++返回物件,前++返回引用, 原因跟 i++和++i一樣, ++++i ==> ++(++i)支援, i++++ ==> i++(i++)不支援

1)所有容器必然帶有乙個typedef … iterator; 則list容器為typedef __list_iteratoriterator;2)迭代器需要支援執行符操作*,->,++,–等

3)self tmp = this; 不會喚起過載函式,會執行拷貝建構函式

4)後++返回物件,前++返回引用, 原因跟 i++和++i一樣, ++++i ==> ++(++i)支援, i++++ ==> i++(i++)不支援

5)由於容器都是前閉後開原則,迭代器都會支援begin(), end()函式返回第1個節點迭代器最後1個節點後面乙個節點迭代器

STL順序容器 list

list是乙個線性鍊錶結構,它的資料由若干個節點構成,每乙個節點都包括乙個 息塊 即實際儲存的資料 乙個前驅指標和乙個後驅指標。它無需分配指定 記憶體大小且可以任意伸縮,這是因為它儲存在非連續的記憶體空間中,並且由指 針將有序的元素鏈結起來。由於其結構的原因,list 隨機檢索的效能非常的不好,因為...

學習篇 STL侯捷課程 (未完待續)

traits是人為製造的特性萃取機制,是加的中間層。class template iterators都有能力定義自己的associated types。nonclass template iterators,即native pointer,無法定義自己的associated types,但其實很直觀...

侯捷學習觀

作者簡介 侯捷,資訊工作者 專欄執筆 大學教師。常著文章自娛,頗示己志。學習觀 談學習觀,我不想在技術層次打轉。讓我們在制高點上分析。求深還是求廣?胡適先生說 為學當如金字塔,要能廣來要能深 但我們俱足凡夫,如何能夠 又深又廣?我比較追求 深 我認為深比廣更需要優先面對。曾有一位同事,聲稱精通十數種...