stl原始碼剖析01 迭代器

2021-10-19 10:50:14 字數 2645 閱讀 5062

下面介紹乙個容器、演算法、迭代器在一起使用的案例

templateinputiterator find(inputiterator first, inputiterator last,

const t& value)

#include #include #include #include #include using namespace std;

int main()

; vectorivect(ia, ia + arraysize);

listilist(ia, ia + arraysize);

dequeideque(ia, ia + arraysize);

vector::iterator iter1 = find(ivect.begin(), ivect.end(), 4);

if (iter1 == ivect.end())

std::cout << "4 not found" << std::endl;

else

std::cout << "4 found" << std::endl;

list::iterator iter2 = find(ilist.begin(), ilist.end(), 6);

if (iter2 == ilist.end())

std::cout << "6 not found" << std::endl;

else

std::cout << "6 found" << std::endl;

deque::iterator iter3 = find(ideque.begin(), ideque.end(), 8);

if (iter3 == ideque.end())

std::cout << "8 not found" << std::endl;

else

std::cout << "8 found" << std::endl;

system("pause");

return 0;

}

template class auto_ptr

templateauto_ptr(auto_ptr& rhs) : pointee(rhs.release()) {}

~auto_ptr()

templateauto_ptr& operator=(auto_ptr& rhs)

t& operator*()const

t* operator->()const

t* get()const

private:

t* pointee;

};

int main()

templateclass list

listitem* front()const

private:

listitem* _end;

listitem* _front;

long _size;

};templateclass listitem

listitem* next()const

private:

t _value;

listitem* _next;

};

但是為了讓迭代器適用於任何型別的節點,而不僅限於listitem,我們將迭代器設計為乙個類模板

templatestruct listiter

item& operator*()const

item* operator->()const

listiter& operator++()

listiter& operator++(int)

bool operator==(const listiter& i)const

bool operator!=(const listiter& i)const

};

templatebool operator!=(const listitem& item, t n)

int main()

listiter> begin(mylist.front());

listiter> end;

listiter> iter;

iter = find(begin, end, 3);

if (iter == end)

std::cout << "3 not found" << std::endl;

else

std::cout << "3 found" << std::endl;

return 0;

}

如果不是為了迭代器的設計,listitem原本應該完全隱藏。所以,為了避免暴露我們設計容器的細節,我們應該將迭代器的所有實現細節也封裝其容器類中,這也正是每乙個stl容器都提供了乙份專屬於自己的迭代器的緣故

STL原始碼剖析 迭代器

一 迭代器 迭代器五種相應型別 1.valuetype,是指迭代器所指物件的型別。2.differencetype,用來表示迭代器之間的距離,可以用來表示乙個容器的最大容量。例如stl中的count 函式,其返回值就是difference type。3.referencetype,在c 中如果要傳回...

STL原始碼剖析 迭代器

迭代器是一種模式,實現了通過乙個統一介面訪問stl容器的方法。stl作為橋梁鏈結了stl演算法與容器。例如,我們可以通過sort a.begin a.end 完成一次利用演算法對vector型別容器a的排序。標準stl中,迭代器在容器內部,每種容器都有自己專屬的迭代器。這樣做的原因是,如果要建立迭代...

重讀STL原始碼剖析 迭代器

首先關於迭代器 迭代器不屬於容器,它與容器屬於不同的類,但通過迭代器 迭代器中有某些成員變數 同時也對 等運算子進行了過載 可以訪問到容器內的元素 比如list的迭代器,它不屬於list,但它裡面存放了乙個指標,這個指標指向list結構裡的成員node,這樣就可以借用迭代器去訪問容器了。迭代器並不屬...