STL中 auto和迭代器iterator的區別

2021-10-05 04:52:25 字數 1276 閱讀 5577

1.auto基本用法:

(1)auto的原理就是根據後面的值,來自己推測前面的型別是什麼;

(2)auto的作用就是為了簡化變數初始化,如果這個變數有乙個很長很長的初始化型別,就可以用auto代替;

注意點:

a、用auto宣告的變數必須初始化(auto是根據後面的值來推測這個變數的型別,如果後面沒有值,自然會報錯);

b、函式和模板引數不能被宣告為auto;

c、因為auto是乙個佔位符,並不是乙個他自己的型別,因此不能用於型別轉換或其他一些操作,如sizeof和typeid;

d、定義在乙個auto序列的變數必須始終推導成同一型別。

std::vector vec;

//我們可以用atuo來代替初始化型別:

vector

::iterator it = vec.

begin()

;//等價於 auto it = vec.begin();

2.迭代器iterator

前面文章詳細總結過:iterator總結

簡單理解:相當於乙個指標,可以解引用操作,刪除元素的要考慮迭代器的失效問題。

3.auto 和 iterator的區別

(1)以map為例子

map<

int,string> map1;

//使用iterator

map<

int,string>

::iterator it = map1.

begin()

;for

(;it != map1.

end();

++it)

//使用auto

for(

auto

&x : map1)

注意:這裡的auto推導出來的型別並不是迭代器型別,而是鍵值對(pair)型別,這裡auto有迭代器的功能,能夠遍歷map1,相當於把迭代器封裝起來了,但是這裡的auto 只能進行正向的遍歷,而iterator還可以進行反向的遍歷,如下:

map<

int,string>

::reverse_iterator it = map1.

rbegin()

;for

(;it != map1.

rend()

;++it)

STL中iterator迭代器

1 標頭檔案 所有容器有含有其各自的迭代器型別 iterator types 所以當你使用一般的容器迭代器時,並不需要含入專門的標頭檔案。不過有幾種特別的迭代器,例如逆向迭代器,被定義於中。2 迭代器型別 迭代器共分為五種,分別為 input iterator output iterator for...

關於vector迭代器定義和auto直接定義

今天在做題的時候碰到乙個很納悶的題,就是在遍歷vector 的時候用迭代器標準定義迭代器遍歷和auto直接定義迭代器 二者形式不同,並且呼叫first和second元素的形式也不同!一 正確使用迭代器標準定義形式 如下 for vector iterator it add.begin it add....

STL中迭代器失效問題

對於vector deque等連續儲存的容器來說,插入元素 insert 或者刪除元素 erase 會導致後邊的迭代器都失效,解決方法是,erase iter 會返回下乙個有效迭代器的值,刪除元素時用將當前迭代器賦值為erase的返回值,系統會自動將迭代器的指向修改的。for iter cont.b...