stl原始碼分析之二—迭代器
1.traits程式設計技巧:
traits程式設計技法大量運用在
stl實現品中,它利用「內嵌型別」的程式設計技巧與編譯器的
template
引數推導功能,增強
c++未能提供的關於型別認證方面的能力,彌補
c++不為強型別語言的遺憾,
例:template
struct myiter
t& operator*() const
};template
typename i::value_type
func(i ite)
myiterite(new int(8));
cout<
注意:func()
typename
,因為t
是乙個template
引數,在他被編譯器具體現化之前,編譯器對
t一無所知;換句話說,編譯器並不知道
myiter::value_type
代表的是乙個型別還是乙個
member function
或是乙個
data member
typename
的用意就是在告訴編譯器這是乙個型別,這樣才能通過編譯。
2. 迭代器相應型別之一:valule type
指迭代器所指物件的型別。任何乙個打算和stl
演算法有完美搭配的
class
,都應該定義自己的
value type
內嵌型別。
迭代器型別二:difference type
用來表示兩個迭代器之間的距離,因此它可以表示乙個容器的最大容量,如stl
的count(),
返回值就必須使用
difference type。
template
typename iterator_traits::difference_type
count(inputiterator first, inputiterator last, const t& value)
迭代器型別三:reference type
迭代器型別四:pointer type
迭代器型別五:iterator_category
3.迭代器分類:
input iterator :這種迭代器所指物件,不允許外界改變,唯讀。
output iterator:只寫。
forward iterator :允許「寫入型」演算法,(
replace()
)在此種迭代器所形成的區間上進行讀寫操作。(允許
operator++)
bidirectional iterator :可雙向移動,(允許
operator++
也可以operator--)
random access iterator:包含所有的指標算數能力,包括
p+n, p-n,p[n],p1-p2.p1
STL原始碼分析 迭代器失效小結
在c primer一書中是這樣限定的 1 在deque容器首部或者尾部插入元素不會使得任何迭代器失效。2 在其首部或尾部刪除元素則只會使指向被刪除元素的迭代器失效。3 在deque容器的任何其他位置的插入和刪除操作將使指向該容器元素的所有迭代器失效。但是 我在vs2005測試發現第一條都不滿足,不知...
STL原始碼剖析 迭代器
一 迭代器 迭代器五種相應型別 1.valuetype,是指迭代器所指物件的型別。2.differencetype,用來表示迭代器之間的距離,可以用來表示乙個容器的最大容量。例如stl中的count 函式,其返回值就是difference type。3.referencetype,在c 中如果要傳回...
STL原始碼剖析 迭代器
迭代器是一種模式,實現了通過乙個統一介面訪問stl容器的方法。stl作為橋梁鏈結了stl演算法與容器。例如,我們可以通過sort a.begin a.end 完成一次利用演算法對vector型別容器a的排序。標準stl中,迭代器在容器內部,每種容器都有自己專屬的迭代器。這樣做的原因是,如果要建立迭代...