C 迭代器篇

2021-10-02 10:54:11 字數 4642 閱讀 4126

內建迭代器實現案例

下面為乙個 list 的內建迭代器實現案例。

通過該案例我們能夠清楚的理解迭代器的內部實現原理

//內建迭代器實現案例

#include

//#include

using

namespace std;

//結點結構體

template

<

typename type>

struct node

node

(type data)

:data

(data)

,next

(nullptr

)node

(type data, node

* next)

:data

(data)

,next

(next)

//資料成員

type data;

//資料域

node

* next;

//指標域};

//再封裝成煉表list

template

<

typename type>

class

list

void

push_back

(type data)

;//尾插

void

push_front

(type data)

;//頭插

type front()

;//獲取表頭元素

protected

: node

* listheadnode;

node

* listtailnode;

int listsize;

//迭代器的主要部分:類中類進行實現

//實質:通過運算子的過載使得類的物件模仿指標的一種行為

public

: node

*begin()

node

*end()

//iterator為list的類中類

class

iterator

void

operator

=(node

* pmove)

type operator*(

) iterator&

operator++(

int)

protected

: node

* pmove;};

};//push_back

template

<

typename type>

void list

::push_back

(type data)

else

listsize++;}

//push_front

template

<

typename type>

void list

::push_front

(type data)

else

listsize++;}

//front

template

<

typename type>

type list

::front()

intmain()

cout << endl;

system

("pause");

return0;

}

內建迭代器有:正向迭代器、反向迭代器、常屬性迭代器、常屬性反向迭代器

迭代器種類

類中類名稱

起始結束

正向迭代器

iterator

begin()

end()

反向迭代器

reverse_iterator

rbegin()

rend()

常屬性迭代器

const_iterator

cbegin()

cend()

常屬性反向迭代器

const_reverse_iterator

crbegin()

crend()

迭代器的使用示例:

list<

int> mylist;

mylist.

push_back(1

);mylist.

push_back(2

);mylist.

push_back(3

);list<

int>

::iterator iter;

//正向迭代器

cout <<

"正向輸出"

<< endl;

for(iter = mylist.

begin()

; iter != mylist.

end(

); iter++

) cout << endl;

list<

int>

::reverse_iterator riter;

//逆向迭代器

cout <<

"逆向輸出"

<< endl;

for(riter = mylist.

rbegin()

; riter != mylist.

rend()

; riter++

) cout << endl;

其他型別容器的迭代器的使用可以進行模擬:

以map對映進行舉例:

//其他容器的迭代器可以進行模擬

map mymap;

mymap[

"love"]=

"you"

; mymap[

"i"]

="you"

; map

::reverse_iterator mapiter;

for(mapiter = mymap.

rbegin()

; mapiter != mymap.

rend()

; mapiter++

)

注意:介面卡(如:stack 、queue、priority_queue)沒有迭代器

流型迭代器用到的其實並不多,了解即可

輸出流型迭代器的兩種形式:

- ostream_iterator

(ostream out)

;//用的少

- ostream_iterator

(ostream out,

char

* ch)

;//以後面的字串做間隔進行輸出

注意:第二種形式中第二個引數型別為 char* 而不是 string,如string型別需要通過string類的方法c_str()轉換為char*。

1. 輸出流型迭代器做等號等效於輸出

#include

#include

using

namespace std;

intmain()

2. 輸出流型迭代器與copy演算法的結合

#include

#include

using

namespace std;

intmain()

;copy

(array +

0, array +

10, ostream_iterator<

int>

(cout,

"\t"))

;//ostream_iterator(cout, "\t")為構造的乙個無名流型迭代器

cout << endl;

return0;

}

輸入流型迭代器的兩種形式:

- istream_iterator		end_of_	stream	 輸入流結束標記。錯誤

- istream_iterator

(istream in) 用做輸入

#include

#include

#include

using

namespace std;

intmain()

cout <<

"myvector"

<< endl;

copy

(myvector.

begin()

, myvector.

end(

), ostream_iterator<

int>

(cout,

"\t"))

;//ostream_iterator(cout, "\t")為構造的乙個無名流型迭代器

cout << endl;

return0;

}

python之迭代器篇

一.迭代器 只要物件本身有 iter 方法,那它就是可迭代的 執行 iter 就會生成迭代器 迭代器有 next 用於獲取值 next 超出界限了會報stopiteration異常 迭代器是一次性的,且只能一直往前迭代 獲取生成器的方法 迭代器 可迭代物件.iter 迭代器 iter 可迭代物件 生...

C 迭代器之 反向迭代器

反向迭代器 reverse iterator 是普通迭代器的介面卡,通過重新定義自增和自減操作,以達到按反序遍歷元素的目的。如果在標準演算法庫中用反向迭代器來代替普通的迭代器,那麼執行結果與正常情況下相反。除此之外,其用法與普通迭代器完全一樣,我們不作詳細討論。這裡主要討論的是反向迭代器的乙個很特殊...

C 迭代器 迭代器失效問題

問題描述 輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於位於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。這是劍指offer上的一道經典習題,我們首先可以想到的解決方案是 再建立乙個臨時陣列把偶數先存放起來,然後把臨時空間的...