C++技術問題總結-第6篇 STL迭代器相關

1、STL爲什麼要用迭代器
    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操作返回的迭代器失效。

Ø erasepop_back都會引起指向刪除點的迭代器失效。

Ø insert後容器空間重新分配時,指向原數據的迭代器失效。

    list迭代器:當刪除時(erase),指向被刪除點的迭代器會失效。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章