记录 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;
}
相关文章
相关标签/搜索