在平常的編程中,有這麼幾種操做仍是比較常見的:node
把一組數據都賦值成一個數,在一組數據中查找一個數,統計一組數據中符合條件的數等等。ios
通常的寫法能夠用循環,沒有什麼是循環不能搞定的。假如在這裏怎麼用介紹循環寫,估計要被說騙點擊率了。。。編程
首先,對於批量賦值,咱們有這樣的幾個函數能夠用數組
1.memset(cstring)函數
適用於內置數據類型數組的批量賦值,由於它是按照字節賦值的,因此對於int類型只能夠賦值爲-1,0,對於char類型能夠賦值爲任意字符spa
例:memset(A,0,sizeof(A));//A爲int[10]類型變量code
2.fill(algorithm)對象
適用於內置類型數組,自定義類型數組(只支持一維數組)和容器類。由於它是按照單元賦值的,所以能夠爲數組中每個元素賦值爲任何合法值。在重載了類中=運算符以後,咱們還能夠將容器內對象批量賦值爲一個對象值。blog
fill(A,A+10,5); //A爲 int[10]類型變量string
fill(vec.begin(),vec.end(),9); //vec 爲vector<int>類型
3.for_each(algorithm)
適用於任何容器以及數組,可定製性功能強,能夠利用自定義函數或者自定義仿函數進行操做(包括賦值,輸出值等等)
例:
#include <cstdio> #include <algorithm> #include <vector> #include <iostream> using namespace std; class setNode{ Node u; public: setNode(Node u):u(u){} void operator ()(Node & node) { node = u; } }; void print(Node & u){ printf("(%d,%d)\n",u.x,u.y); } int main(){ vector<Node> vec; vec.push_back(Node(1,2)); vec.push_back(Node(3,4)); for_each (vec.begin(),vec.end(),setNode(Node(1,2))); for_each (vec.begin(),vec.end(),print); return 0; }