记录 C++ STL 中 一些好用的函数--持续更新 (for_each,transform,count_if,find_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<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;
}
复制代码

 

posted @   deepwzh  阅读(642)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示