C Primer3 4節迭代器知識點梳理

2021-10-06 19:46:56 字數 1725 閱讀 3958

1、迭代器的含義:

(1)可能是迭代器概念本身

(2)可能是容器定義的迭代器型別

(3)可能是指某個迭代器物件。

2、迭代器的作用:

(1)迭代器類似於指標型別,可以使用迭代器來間接訪問string物件的字元和vector物件的元素。

(2)迭代器也能從乙個元素移動到另外乙個元素。

4、迭代器的型別:

(1)一般來說,我們並不清楚也不在意迭代器的型別是什麼;

(2)但實際上,擁有迭代器的標準庫型別使用(用容器定義的)iterator和const_iterator來表示迭代器的型別。

(3)語法形式:vector< int >iterator it; 或vector< string >const_iterator it;。

(4)iterator的物件可讀可寫,const_iterator的物件可讀不可寫。

5、迭代器的獲取方法;

(1)因為string和vector等其他容器型別都有begin和end成員,因為我們不知道迭代器的具體型別,我們可以使用auto型別來定義迭代器的物件。

(2)begin成員:負責返回指向第乙個元素的迭代器。end成員:負責返回指向容器(或string物件)尾元素的下一位置的迭代器。end成員返回的迭代器被稱為尾後迭代器。

(3)語法形式:string str; auto a=str.begin(),auto b=str.end();

(4)特殊情況下,如果容器(或string物件)為空,則begin和end返回的是同乙個迭代器,都是尾後迭代器。

6、迭代器運算子

(1)==和!=用來比較兩個合法的迭代器是否相等。

(2)*iter //返回迭代器所指元素的引用。

(3)iter->men等價於(*iter).men。 //解引用iter並獲取該元素的成員men。

(4)++iter; //指向該元素的下乙個位置,從乙個元素移動到另外乙個元素。

(5)- -iter; //指向該元素的上乙個位置。

(6)begin和end()運算子,begin和end返回的型別由容器的物件的是否是常量決定。若vector物件的型別是常量,那麼返回的就是const_iterator;若非常量,那麼返回的就是iterator。形如:

vector< int > vec;//非常量物件; const vector< int > vec; //常量物件

(7)為了便於得到const_iterator型別的返回值,引入了兩個新函式,分別是cbegin和cend函式。無論vector物件是否是常量,兩個函式的返回的型別都是const_iterator。

(8)注意事項:

a、不能在範圍for迴圈中向vector物件新增元素。

b、任何一種可能改變vector物件容量的操作,都會使vector物件的迭代器失效,所以不允許往使用了迭代器的容器物件新增元素。

7、迭代器的運算

(1)iter+n;或liter-n;可以令迭代器相加(或相減),其返回值是向前(或向後)移動了若干位置的迭代器。

(2)兩個迭代器的相減:前提是兩個迭代器指向的是同乙個容器中的元素或尾元素的下一位置,就能相減,得到的結果是兩個迭代器的距離,距離的型別是difference_type的帶符號整數,可正可負。

8、使用迭代器的經典演算法——二分法。

c++primerp100頁中的二分法的例子中有錯誤,錯誤在if(sought<*mid)下面的這條語句,只將mid值重新賦給end,卻沒有給mid重新賦值,導致while迴圈判斷mid==end,直接停止迴圈。

足跡C primer 34 泛型演算法結構

泛型演算法結構 演算法所要求的迭代器操作可以分為5個迭代器類別。輸入迭代器唯讀,不寫,單遍掃瞄,只遞增 輸出迭代器只寫,不讀,單遍掃瞄,只遞增 前向迭代器可讀寫,多遍掃瞄,只遞增 雙向迭代器可讀寫,多遍掃瞄,可遞增遞減 隨機訪問迭代器可讀寫,多遍掃瞄,支援全部迭代器運算 輸入迭代器 可以讀取序列中的...

C Primer5 4節 迭代語句

迭代語句通常被稱為迴圈,迭代語句有while,do while迴圈 傳統for迴圈和範圍for迴圈。1 while迴圈 形式 while condition statement 1 condition不能為空。2 定義在while條件或者迴圈體內的變數每次迭代都要經歷從建立到銷毀的過程。3 先判斷條...

3 4迭代器簡介

1.每種容器型別都定義了自己的迭代器型別 vector iterator iter 2.begin 返回指向第乙個元素的迭代器 end 返回指向最後以後元素後乙個元素的迭代器 3.使用 iter對迭代器解引用 4.const iterator型別它自身可以改變.但是不能改變它指向的物件的值 5.an...