迭代器的簡介
(1):迭代器類似於指標型別,它也提供了對物件的間接訪問。
(2):指標是c語言中就有的東西,迭代器是c++中才有的,指標用起來靈活高效,迭代器功能更豐富些。
(3):迭代器提供乙個對容器物件或者string物件的訪問的方法,並且定義了容器範圍。
使用迭代器
迭代器和指標不一樣,容器和string有迭代器型別同時擁有返回迭代器的成員。比如,容器都有的成員begin和end,其中begin成員複製返回指向第乙個元素(第乙個字元)的迭代器,而end成員返回指向容器(或string物件)尾元素的下乙個位置的迭代器,也就是說end指示的是乙個不存在的元素,所以叫end返回的是尾後迭代器。一般我們清楚乙個迭代器的準確型別是什麼,所以我們都是使用auto或者decltype來定義變數的。
vector
v;auto b=v.begin();
decltype(v.begin()) b=v.begin();
標準容器迭代器的運算子
*iter
返回迭代器iter所指元素的引用
iter
->men
解引用iter並獲得該元素的名為men的成員
,相當於(*iter)
.men++
iter
令iter指示容器的下乙個元素--
iter
令iter指示容器的上乙個元素
iter1==iter2
如果兩個迭代器指示的是同乙個元素或者它指向同乙個容器的尾後迭代器,則相等
.
下面給出乙個使用迭代器運算子修改容器元素的**示例:
#include
using
namespace
std;
#include
int main()
cout
<< endl;
for (auto v_quote = v.begin(); v_quote != v.end(); ++v_quote)
cout
<< "修改後:";
for (auto v_quote : v)
cout
<< endl;
system("pause");
return
0;}
輸出結果:
迭代器的型別
那些擁有迭代器的標準庫型別都是使用:iterator和const_iterator來表示迭代器的型別:
vector
::iterator it; //it能讀寫vector的元素
vector
::const_iterator it; //it只能讀vector的元素,不可以修改vector中的元素
string::iterator s; //s可以讀寫string物件中的元素
string::const_iterator s; //s只可以讀string物件中的元素,不可以修改string物件中的元素
const_iterator和常量指標一樣,只可以讀取但不可以修改所指的值。在c++11的新標準中,為了便於得到const_iterator型別的返回值,引入兩個新的函式,分別是cbegin和cend,功能類似於begin和end,只是返回的值型別為const_iterator;
vector動態增長的限制:
(1):不能再範圍for迴圈中向vector物件新增元素。
(2):任何一種可能改變vector容量的操作,比如push_back,都會使該vector物件的迭代器失效。
迭代器的運算
iter+n //迭代器加上乙個整數值仍得到乙個迭代器,迭代器指示的新位置向前移動了,指示可能是容器的乙個元素或者是尾部的下乙個位置
iter-n
//相反,迭代器指示的位置向後移動了,指示可能是容器的乙個元素或者是尾部的下乙個位置
iter1+=n //等價於iter1+n
iter1-=n //等價於iter2-n
iter1-iter2
//兩個迭代器的距離,
>,=,<=
//位置離begin近的較小
兩個迭代器返回的值,在string和vector都為它定義了乙個新的型別–difference_type,它是乙個帶符號的整型。
使用迭代器運算的乙個經典演算法是二分查詢,**如下:
#include
using
namespace
std;
#include
#include
int main()
; cout
<< "請輸入需要查詢的值:";
int temp = 0;
cin >> temp;
sort(v.begin(), v.end()); //使用排序函式對容器vector中的元素進行排序
auto beg = v.begin();
auto end = v.end();
auto mid = v.begin()+ (end - beg) / 2;
/*二分查詢法:
每次都拿中間的那個值和需要查詢的值做比較,如果相等就退出查詢
如果查詢的值比中間那個值小,則向前查詢
如果查詢的值比中間那個值大,則向後查詢
*/while (mid != end && * mid != temp)
else
mid = beg + (end - beg) / 2;
}if (* mid == temp)
cout
<< "find"
<< endl;
else
cout
<< "not find"
<< endl;
system("pause");
return
0;}
輸出結果:
c 迭代器介紹
迭代器 iterator 的介紹 背景 指標可以用來遍歷儲存空間連續的資料結構,但是對於儲存空間費連續的,就需要尋找乙個行為類似指標的類,來對非陣列的資料結構進行遍歷。定義 迭代器是一種檢查容器內元素並遍歷元素的資料型別。迭代器提供對乙個容器中的物件的訪問方法,並且定義了容器中物件的範圍。迭代器 i...
C 迭代器基礎介紹
1.迭代器 c 迭代器是一種檢查容器內元素並遍歷元素的資料型別。標準庫為每一種標準容器 包括vector 定義了一種迭代器型別。迭代器型別提供了比下標操作更加通用的化的用法。2.容器的iterator型別 每種容器型別都定義了自己的c 迭代器型別,如vector vector iterator it...
C 迭代器之 反向迭代器
反向迭代器 reverse iterator 是普通迭代器的介面卡,通過重新定義自增和自減操作,以達到按反序遍歷元素的目的。如果在標準演算法庫中用反向迭代器來代替普通的迭代器,那麼執行結果與正常情況下相反。除此之外,其用法與普通迭代器完全一樣,我們不作詳細討論。這裡主要討論的是反向迭代器的乙個很特殊...