在平常的编程中,有这么几种操做仍是比较常见的: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; }