迭代器初步
迭代器就是專門用來訪問容器的指針,簡單來講,迭代器就是指針
迭代器中兩個重要成員函數
1.begin,begin函數返回容器中第一個成員的迭代器(地址),
2.end,end函數返回容器最後一個元素的下一個位置的迭代器(地址),所以end返回的迭代器也叫尾後迭代器
3.如果容器爲空,那麼begin和end都返回尾後迭代器
迭代器遍歷string
void traversestringbyitor()
{
string s="123456778";
for (string::iterator it=s.begin();it!=s.end();++it)
{
cout<<*it<<endl;//對迭代器解引用
}
}
每個容器中都有迭代器,但是使用容器類型加上作用域運算符進行區分
vector<int>::iterator it;//vector<int>的迭代器
vector<string>::iterator it;//vector<string>的迭代器
string::iterator it;//字符串的迭代器
const_iterator迭代器
C++中,可以用const_iterator來遍歷容器,const_iterator指向的元素只讀,不可修改,但是const_iterator本身可以變,類似於指向const變量的指針
當我們修改const_iterator指向的元素時會報錯
void testconstitor()
{
vector<int> v(10,-5);
vector<int>::const_iterator it=v.begin();
*it=1;
}
使用const_iterator遍歷const vector<int>
void testconstitor()
{
const vector<int> cv(10,-5);
for (vector<int>::const_iterator cit=cv.begin();
cit!=cv.end();++cit) {
cout<<*cit<<endl;
}
}
用迭代器遍歷string時,begin返回iterator,遍歷const vector<int>時,begin返回const_iterator。
所以,begin可以遍歷const容器對象,也可以遍歷非const容器對象,其返回值視容器對象的類型而定(對象是const,返回const_iterator,非const,返回iterator)
如果容器對象的類型不是const的,那麼用iterator和const_iterator均可,如果是const的,只能用const_iterator遍歷
使用const_iterator遍歷vector<int>
void testconstitor()
{
vector<int> v(10,-5);
for (vector<int>::const_iterator it=v.begin();
it!=v.end();++it) {
cout<<*it<<endl;
}
}
結果同上
如果用iterator去遍歷const容器對象,無法編譯通過(因爲這樣可以通過迭代器修改容器中的元素,違背const變量無法修改的原則)
void testconstitor()
{
const vector<int> cv(10,-5);
for(vector<int>::iterator it=cv.begin();
it!=cv.end();++it){
cout<<*it<<endl;
}
}
使用迭代器對已排序的vector進行二分查找
int searchbyitor(const vector<int> nums, int target)
{
vector<int>::const_iterator beg=nums.begin();
vector<int>::const_iterator end=nums.end();
vector<int>::const_iterator mid=beg+(end-beg)/2;
int res=0;
while(beg!=end) {
if (*mid==target) {
cout<<"find it"<<endl;
res=*mid;
break;
}
else if (*mid>target) {
end=mid;
}
else {
beg=mid+1;
}
mid=beg+(end-beg)/2;
}
if (res!=target) cout<<"not find it"<<endl;
return res;
}
當調用searchbyitor({1,2,3,4,5},-1);時
輸出結果
當調用searchbyitor({1,2,3,4,5},1)或者searchbyitor({1,2,3,4,5},5)時
輸出結果
當調用searchbyitor({1,2,3,4,5},2)時
輸出結果
證明該程序基本可靠。上述程序用的迭代器是const_iterator
參考:
《C++ Primer》
歡迎大家評論交流,作者水平有限,如有錯誤,歡迎指出