要訪問順序容器和關聯容器中的元素,需要通過「迭代器(iterator)」進行,迭代器是乙個變數,相當於容器和操作容器的演算法之間的中介。迭代器可以指向容器中的某個元素,通過迭代器就可以讀寫它指向的元素。從這一點上看,迭代器和指標型別。迭代器按照定義方式分為以下四種:
正向迭代器,定義方式:
容器類名::iterator 迭代器名;常量正向迭代器,定義方式:
容器類名::const_iterator 迭代器名;反向迭代器,定義方式:
容器類名::reverse_iterator 迭代器名;常量方向迭代器,定義方式:
容器類名::const_reverse_iterator 迭代器名;迭代器用法示例:
通過迭代器可以讀取它指向的元素,*迭代器名就代表迭代器指向的元素。通過非常量迭代器還能修改其指向的元素。
迭代器都可以進行++操作。方向迭代器和正向迭代器的區別在於:
#include #include using namespace std;
int main()
cout << endl;
//用反向迭代器遍歷容器
for (vector::reverse_iterator j = v.rbegin(); j != v.rend(); ++j)
cout << *j << " ";
return 0;
}
程式的輸出結果是:
vector的迭代器是隨機迭代器,因此遍歷vector容器中有以下幾種做法,下面的程式中,每個迴圈演示一種做法。
遍歷vector容器
#include #include using namespace std;
int main()
}
stl中有用於操作迭代器的三個函式模板,他們是:
#include #include #include //要使用操作迭代器的函式模板,需要包含此檔案
using namespace std;
int main()
; list lst(a, a+5);
list ::iterator p = lst.begin();
advance(p, 2); //p向後移動兩個元素,指向3
cout << "1)" << *p << endl; //輸出 1)3
advance(p, -1); //p向前移動乙個元素,指向2
cout << "2)" << *p << endl; //輸出 2)2
list::iterator q = lst.end();
q--; //q 指向 5
cout << "3)" << distance(p, q) << endl; //輸出 3)3
iter_swap(p, q); //交換 2 和 5
cout << "4)";
for (p = lst.begin(); p != lst.end(); ++p)
cout << *p << " ";
return 0;
}
程式的輸出結果是:32
31 5 3 4 2
STL迭代器技術
stl迭代器技術 c stl和各種容已提供了自己的迭代器,如輸入迭代器,輸出迭代器,前向迭代器,雙向迭代器,隨機迭代器。但是 stl在已有迭代器的基礎上,仍然定義了另外一些迭代器,以簡化某些情況下的操作。一般在 stl iterator.h 檔案中提供。1 輸入流迭代器 istream iterat...
STL總結 迭代器
所有容器都定義了各自的迭代器 迭代器是乙個物件,它的工作是在容器中挑選元素,並將其呈現給迭代器使用者。迭代器分類 input迭代器 向前讀取 istream output迭代器 向前寫入 ostream forward迭代器 向前讀取和寫入 bidirectional迭代器 向前和向後讀取和寫入 l...
STL迭代器失效
vector 1.當插入 push back 乙個元素後,end操作返回的迭代器肯定失效。此時first和end操作返回的迭代器都會失效。3.當進行刪除操作 erase,pop back 後,指向刪除點的迭代器全部失效 指向刪除點後面的元素的迭代器也將全部失效。deque迭代器的失效情況 1.在de...