C 11風格的vector迴圈小坑注意

2021-09-22 20:08:38 字數 511 閱讀 6028

c++11新引入了類似如下分隔的遍歷方式

for(auto iter : vectortemp)

使用的時候需要注意iter變數是否需要加上引用,不然可能導致程式執行的效果不符合自己的預期。例子如下

typedef std::mapmap_test_temp;

typedef std::vectorvec_test;

vec_test vectest;

vectest.resize(8);

for (int i = 0; i < 10; i++)

// 迴圈1

for (auto iter : vectest)

// 迴圈2

for (auto& iter : vectest)

目的是要清理vector中map的資料,但是迴圈1執行後vectest中的資料並沒有被清理掉,因為iter相當是對應map的乙份拷貝,並不會對實際的map物件產生影響,因此要注意新增引用才能實現對應的功能。

基於範圍的for迴圈 C 11

本篇部落格會寫c 11標準的中的乙個新特性範圍for,並解釋它的使用方法。那麼什麼是範圍for呢?在使用早期c 標準的遍歷乙個陣列,我們會使用這段 void testfor for int i 0 i sizeof array sizeof array 0 i 普通迴圈 for int p arra...

C 11學習筆記2之vector

include include include using namespace std int main vb有1個元素,值為10 vectorvc 10,1 vc有10個元素,每乙個的值為1 vectorvd vd有2個元素,分別為10,1 return 0 是用來構造vector物件的 是用來列...

C11簡潔之道 迴圈的改善

在c 98 03中,通過for迴圈對乙個容器進行遍歷,一般有兩種方法,常規的for迴圈,或者使用中的for each方法。for迴圈遍歷 void func void for each方法 void vfunccall int n void func2 void for each相比一般的for迴圈...