iterator模式定義:提供一種方法,使之能夠依序巡訪某個聚合物(容器)所含的各個元素,而又無需暴露該聚合物的內部表述方式。
STL的中心思想在於:將數據容器(containers)和算法(algorithms)分開,彼此獨立設計,最後再以一貼膠着劑將它們撮合在一起。迭代器便起這個作用。
2、迭代器是怎麼實現的
迭代器實現示例。
struct Iter
{
Item* ptr;
Iter(Item* p=0)
:ptr(p)
{}
Item& operator*() const{return *ptr;}
Item* operator->() const{return ptr;}
Iter& operator++(){ptr=ptr->next(); return *this;}
Iter operator++(int){Iter tmp=*this; ++*this; return tmp;}
bool operator==(const Iter& i) const {return ptr==i.ptr;}
bool operator!=(const Iter& i) const {return ptr!=i.ptr;}
};
3、迭代器什麼操作下會崩潰
當迭代器失效時,繼續操作會出現崩潰。
失效有兩種情況。
Ø 由於容器元素整體遷移導致原容器空間不再有效,從而使得指向原空間的迭代器失效。
Ø 由於刪除元素使得某些元素次序發生變化使得原本指向某元素的迭代器不再指向希望指向的元素。
幾種類型迭代器失效情況。
vector迭代器失效。
Ø push_back元素後,end操作返回的迭代器失效。
Ø erase、pop_back都會引起指向刪除點的迭代器失效。
Ø insert後容器空間重新分配時,指向原數據的迭代器失效。
list迭代器:當刪除時(erase),指向被刪除點的迭代器會失效。