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...