記錄 C++ STL 中 一些好用的函數--持續更新 (for_each,transform,count_if,find_if)

在平常的編程中,有這麼幾種操做仍是比較常見的: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;
}
相關文章
相關標籤/搜索