區別iterator和const_iterator和const iterator

如果傳遞的參數爲const類型容器,只能用const_iterator進行遍歷
eg.

void func(const Vector<int> vInt){
	vector<int>::const_iterator iter;
}

說明區別的一個例子:

vector<int> ivec;
vector<int>::const_iterator citer1 = ivec.begin();
const vector<int>::iterator citer2 = ivec.begin();
*citer1 = 1; //error
*citer2 = 1; //right
++citer1; //right
++citer2; //error

1.iterator,const_iterator作用:遍歷容器內的元素,並訪問這些元素的值。iterator可以改元素值,但const_iterator不可改。跟C的指針有點像
(容器均可以++iter,而vector還可以iter-n, iter+n,n爲一整型,iter1-iter2:結果是difference_type類型,表兩元素的距離.)

2.const_iterator 對象可以用於const vector 或非 const vector,它自身的值可以改(可以指向其他元素),但不能改寫其指向的元素值.

3.const iterator與const_iterator是不一樣的:聲明一個 const iterator時,必須初始化它。一旦被初始化後,就不能改變它的值,它一旦被初始化後,只能用它來

改它指的元素,不能使它指向其他元素。(因此const iterator幾乎沒什麼用途)

vector<int> nums(10); // nums is nonconst
const vector<int>::iterator cit = nums.begin();
*cit = 1;               // ok: cit can change its underlying element
++cit;                  // error: can't change the value of cit
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章