下面介紹乙個容器、演算法、迭代器在一起使用的案例
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()
但是為了讓迭代器適用於任何型別的節點,而不僅限於listitem,我們將迭代器設計為乙個類模板templateclass list
listitem* front()const
private:
listitem* _end;
listitem* _front;
long _size;
};templateclass listitem
listitem* next()const
private:
t _value;
listitem* _next;
};
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)
如果不是為了迭代器的設計,listitem原本應該完全隱藏。所以,為了避免暴露我們設計容器的細節,我們應該將迭代器的所有實現細節也封裝其容器類中,這也正是每乙個stl容器都提供了乙份專屬於自己的迭代器的緣故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;
}
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,這樣就可以借用迭代器去訪問容器了。迭代器並不屬...