使用迭代器程式設計

2021-06-01 04:50:53 字數 1678 閱讀 3089

輸入迭代器

輸入迭代器是最普通的型別。輸入迭代器至少能夠使用==和!=測試是否相等;使用*來訪問資料;

使用++操作來遞推迭代器到下乙個元素或到達past-the-end值

為了理解迭代器和stl函式是如何使用它們的,現在來看一下find()模版函式的定義:

template

inputiterator find(inputiterator first,inputiterator last,const t& value)

while (first!=last&&*first!=value)

++first;

return first;

注意 在find演算法中,注意如果 first和last指向不同的容器,該演算法可能陷入死迴圈。

#include

#include//need copy()

#include//need vector

using namespace std;

double darray[10]=;

vectorvdouble(10);

int main()

vector::iterator outputiterator=vdouble.begin();

copy(darray,darray+10,outputiterator);

while(outputiterator!=vdouble.end())

cout<<*outputiteratorreturn 0;

注意當使用copy() 演算法的時候,你必須確保目標容器足夠大的空間,或者容器本身是自動擴充套件的

前推迭代器

前推迭代器能夠讀寫資料值,並能夠向前推進到下乙個值。但沒法遞減。replace()

演算法顯示了前推迭代器的使用方法

template

void replace(forwarditerator first,

forwarditerator last,

const  t&old_value,

const  t&new_value);

使用replace()將【first,last】範圍內的所有值為old_value的物件替換為new_value.

replace(vdouble.begin(),vdouble.end(),1.5,3.14159);

雙向迭代器

雙向迭代器要求能夠增減。如reverse()演算法要求兩個雙向迭代器作為引數;

template

void reverse (bidirectionaliterator first,bidirectionaliterator last);

使用reverse(vdouble.begin(),vdouble.end());

隨機訪問迭代器

隨機訪問迭代器能夠以任意順序訪問資料,並能用於讀寫資料(不是const的c++指標也是隨機訪問迭代器)。

stl的排序和搜尋函式使用隨機訪問迭代器。隨機訪問迭代器可以使用關係操作符作比較

random_shuffle()函式隨機打亂原先順序

template

void random_shuffle (randomaccrssiterator  first,randomaccessiterator last);

使用方法:

random_shuffle(vdouble.begin(),vdouble.end());

迭代器程式設計指南

c 程式設計指南 迭代器 c 程式設計指南 迭代器是一種方法 get 訪問器或運算子,它通過使用 yield 關鍵字對陣列或集合類執行自定義迭代。yield返回語句會導致源序列中的元素在訪問源序列中的下乙個元素之前立即返回給呼叫方。儘管您以方法的形式編寫迭代器,但編譯器會將其轉換為乙個實際上是狀態機...

Lua程式設計 迭代器

迭代器 一種可以遍歷乙個集合中所有元素的 結構 函式表述迭代器 每一次呼叫 函式就會返回集合的下乙個元素 所有迭代器都需要在連續呼叫之間儲存一些狀態 知道當前所處位置以及如何從當前位置到下一步位置 自定義迭代器 閉包為儲存狀態提供了一種良好的機制 閉包就是乙個可以訪問其自身環境中乙個或者多個區域性變...

使用迭代器

建立迭代器最常用的方法是對 ienumerable 介面實現 getenumerator 方法,例如 c 複製 public system.collections.ienumerator getenumerator getenumerator 方法的存在使得型別成為可列舉的型別,並允許使用 fore...