C++知識點5——迭代器簡述

迭代器初步

迭代器就是專門用來訪問容器的指針,簡單來講,迭代器就是指針

 

迭代器中兩個重要成員函數

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》

 

歡迎大家評論交流,作者水平有限,如有錯誤,歡迎指出

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章