记录 C++ STL 中 一些好用的函数–持续更新 (for_each,transform,count_if

在日常的编程中,有这么几种操作还是比较常见的:

把一组数据都赋值成一个数,在一组数据中查找一个数,统计一组数据中符合条件的数等等。

一般的写法可以用循环,没有什么是循环不能搞定的。假如在这里怎么用介绍循环写,估计要被说骗点击率了。。。

首先,对于批量赋值,我们有这样的几个函数可以用

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类型

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;
}

原文链接: https://www.cnblogs.com/Wade-/p/6617721.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/251424

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月14日 上午5:16
下一篇 2023年2月14日 上午5:18

相关推荐