在日常的程式設計中,有這麼幾種操作還是比較常見的:
把一組資料都賦值成一個數,在一組資料中查詢一個數,統計一組資料中符合條件的數等等。
一般的寫法可以用迴圈,沒有什麼是迴圈不能搞定的。假如在這裡怎麼用介紹迴圈寫,估計要被說騙點選率了。。。
首先,對於批量賦值,我們有這樣的幾個函式可以用
1.memset(cstring)
適用於內建資料型別陣列的批量賦值,因為它是按照位元組賦值的,所以對於int型別只可以賦值為-1,0,對於char型別可以賦值為任意字元
例:memset(A,0,sizeof(A));//A為int[10]型別變數
2.fill(algorithm)
適用於內建型別陣列,自定義型別陣列(只支援一維陣列)和容器類。因為它是按照單元賦值的,因此可以為陣列中每一個元素賦值為任何合法值。在過載了類中=運算子之後,我們還可以將容器內物件批量賦值為一個物件值。
fill(A,A+10,5); //A為 int[10]型別變數
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; }