論C 11 中vector的N種遍歷方法

2021-08-04 21:19:43 字數 1139 閱讀 6814

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