內建迭代器實現案例
下面為乙個 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上的一道經典習題,我們首先可以想到的解決方案是 再建立乙個臨時陣列把偶數先存放起來,然後把臨時空間的...