STL原始碼剖析之Iterator

2021-07-23 08:43:49 字數 969 閱讀 1112

typename一般來說用法比較簡單,在定義模板的時候宣告乙個類引數。

template

class demo

;

這個時候typename和class沒有任何區別。但是typename還有其他用法。乙個類除了有類的成員變數、成員函式之外,還可以有類的定義。

template

class demo

;

這種定義可以為外部所用,但是必須不能漏掉字首typename,否則編譯器將不知道你所用的是乙個型別還是乙個變數。

template t>

class

v;

stl中乙個很重要的思想是把容器和演算法區分開來。容器通過模板類來實現,演算法通過模板方法來實現。前者有vector,map等等;後者則有sort,distance,find等等。

而溝通兩者的橋梁就是iterator。通常algorithm不知道自己的演算法是執行在什麼樣的容器上,但是通過iterator,演算法能保證能夠遍歷容器裡面的元素。這就是為什麼iterator如此重要。

具體遍歷的方法到底是不是由容器實現的呢?

什麼是智慧型指標?最直觀的表現是:乙個普通類持有乙個指標,過載了*、->、==、!=、++等運算子,裝得很像乙個指標一樣。

分別是inputiterator、outputiterator、forwarditerator、bidirectionaliterator和randomaccessiterator。五種不同的iterator發揮著不同的作用。這個category不是某個iterator的字段,而是實實在在的乙個類。所以category是模板的類引數之一。

template

struct iterator

;

iterator_traits的出現相當於繼續再iterator類的typedef之上封了一層,但是還囊括了原生指標。

STL之deque原始碼剖析

deque是一種那個雙向開口的連續線性空間,其頭尾端做元素的插入和刪除效率比vector效率高很多。deque和vector的最大差異,一在於deque允許常數時間內對頭尾端進行元素插入或移除操作,二在於deque沒有所謂容量概念,因為它是動態地分段連續空間組合而成,隨時可以增加一段新的空間並鏈結起...

STL原始碼剖析之vector

向量vector 1.vector概述 vector的資料安排以及操作方式,與array非常相似。兩者的唯一差別在於空間的運用的靈活性。array是靜態空間,一旦配置了就不能改變 vector是動態空間,隨著元素的加入,它的內部機制會自行擴充空間以容納新元素。vector的實現技術,關鍵在於其對大小...

stl原始碼剖析之vector

作者最近在學習c 學習侯捷的stl原始碼剖析這本書,但是我覺得裡面的內容有些古老並且生澀。比如說alloc,對於一些基礎知識不太牢固的同學不是很友好 我建議先細讀第二章前4小節,第一級分配器之後的內容可等基礎足夠再回頭彌補 雖然這本書本就不是面對像菜鳥的c 程式設計師。然一些基礎思想,程式設計方法,...