C 迭代器(STL迭代器)iterator詳解

2022-08-04 09:21:11 字數 1898 閱讀 4624

要訪問順序容器和關聯容器中的元素,需要通過「迭代器(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...