隨著c++11標準的出現,c++標準新增了許多有用的特性,c++**的寫法也有比較多的變化。
vector是經常要使用到的std元件,對於vector的遍歷,本文羅列了若干種寫法。
(注:本文中**為c++11標準的**,需要在較新的編譯器中編譯執行)
假設有這樣的乙個vector:(注意,這種列表初始化的方法是c++11中新增語法)
vectorvallist = ;
需要輸出這個vector中的每個元素,測試原型如下:
void showvec(const vector& vallist)
int main(int argc, char* argv)
;showvec(vallist);
return 0;
}下面就開始我們的茴香豆的n種寫法吧 !
方法零,對c念念不捨的童鞋們習慣的寫法:
void showvec(const vector& vallist)}或者
void showvec(const vector& vallist) }
方法一,大家喜聞樂見的for迴圈迭代器輸出,(注意,此處使用了c++11中新增的標準庫容器的cbegin函式)
void showvec(const vector& vallist)
}或者使用c++新增的語義auto,與上面差不多,不過能少打幾個字:
void showvec(const vector& vallist)
}方法二,for_each加函式:
template
void printer(const t& val)
void showvec(const vector& vallist)
方法三,for_each加仿函式:
template
struct functor
};void showvec(const vector& vallist)
方法四,for_each加lambda函式:(注意:lambda為c++11中新增的語義,實則是乙個匿名函式)
void showvec(const vector& vallist));}
方法五,for區間遍歷:(注意,for區間遍歷是c++11新增的語法,用於迭代遍歷資料列表)
for (auto val : vallist)
C 11風格的vector迴圈小坑注意
c 11新引入了類似如下分隔的遍歷方式 for auto iter vectortemp 使用的時候需要注意iter變數是否需要加上引用,不然可能導致程式執行的效果不符合自己的預期。例子如下 typedef std mapmap test temp typedef std vectorvec tes...
C 11中的auto陷阱
c 11中引入的auto關鍵字自動推導型別特性,可能是最方便也最容易理解的特性了。然而,即使是這個簡單特性,也有陷阱,需要我們使用時注意。1 引用型別被推導為非引用型別 例如 foo void arg 上面的 中big會被推導為mybigclass型別,而不是mybigclass 型別,從而導致拷貝...
c 11中的tuple(元組)
這次要講的內容是 c 11中的tuple 元組 tuple看似簡單,其實它是簡約而不簡單,可以說它是c 11中乙個既簡單又複雜的東東,關於它簡單的一面是它很容易使用,複雜的一面是它內部隱藏了太多細節,要揭開它神秘的面紗時又比較困難。tuple是乙個固定大小的不同型別值的集合,是泛化的std pair...