`
田庆阳
  • 浏览: 6246 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

for_each处理函数传参

阅读更多
for_each的便利之处非常明显,它遍历容器中的每个元素,并调用用户指定的函数,对每个元素进行处理。
现在的问题时,我想对处理函数在传入一个参数?
本次提供两种解决的方案,一种是使用利用bind1st(bind2nd类似)实现;另一种是通过类(结构体类似)构造实现,不过有两点需要注意一下:
1)使用bind1st函数时,目标函数需要使用ptr_fun函数适配;
2)使用类构造函数对象时,类要提供对应的仿函数operator ();
从本质上讲,这两种方法分别是以函数对象和类对象的方式传入for_each,至于为什么要这么做,感兴趣的可以看下for_each的源代码,代码举例如下:
void display(std::string str, int val)
{
    std::cout << str.c_str() << val << std::endl;
}

class Test
{
    public:
        Test(std::string s) : str(s) {}

    public:
        void operator()(int val)
        {
            std::cout << str.c_str() << val << std::endl;
        }

    public:
        std::string str;
};

int main(int argc, char* argv[])
{
    std::vector<int> vec;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);

    for_each(vec.begin(), vec.end(), Test("number = "));
    for_each(vec.begin(), vec.end(), std::bind1st(ptr_fun(display), "value = "));

    return 0;
}
0
1
分享到:
评论

相关推荐

    for_each 返回值

    for_each 返回值提供了一种方便的方式来获取仿函数的状态,从而实现了更多的数据处理操作。 结论 在本文中,我们详细介绍了 for_each 返回值的使用方法和实现原理。通过 for_each 返回值,我们可以方便地获取仿...

    for_each_file 用erlang代码实现遍历文件

    `for_each_file`函数展示了Erlang处理文件系统的通用模式:列举文件,打开每个文件,处理内容,然后关闭文件。这个模式在处理大量文件时非常常见,可以灵活地适应各种需求,如统计、分析、转换或日志处理等。通过...

    STL算法(for_each/transform)

    _For_each_unchecked(_Unchecked(_First), _Unchecked(_Last), _Func); return(_Func); } ``` 其中: - `_InIt`: 迭代器类型,通常为容器中元素的迭代器类型。 - `_Fn1`: 单参数函数对象类型,用于定义操作。 - ...

    for_each.cpp

    for_each遍历vector vector中可以是基本类型(int,double,char,string) 也可以是类类型

    source codes for_each ML algorithm_deeplearning_神经网络_决策树_随机森林_ma

    在本压缩包中,"source codes for_each ML algorithm_deeplearning_神经网络_决策树_随机森林_ma",包含了多种机器学习算法的源代码,包括深度学习、神经网络、决策树以及随机森林等关键领域。这些算法是数据科学和...

    VS2010并行编程的简单实例

    本文将通过一个简单的实例来介绍如何使用`parallel_for_each`函数来进行并行计算。 #### 核心概念与技术 1. **并行编程基础**: - **并行编程**是一种编程模型,它允许程序员编写能同时执行多个任务的代码。这种...

    浅谈List.h,list.h函数解析

    list_for_each_entry宏是一个foreach循环,用于遍历链表中的每个节点,并可以根据条件进行搜索。 List.h头文件提供了链表操作的相关函数和宏,包括链表的初始化、插入、删除、遍历和搜索等操作。这些函数和宏都是...

    Linux内核list&hlist;解读

    `list_for_each_safe_rcu` 是 `list_for_each_safe` 的 RCU 版本。 ```c #define list_for_each_safe_rcu(pos, n, head, lock) \ for (pos = (head)-&gt;next, n = pos-&gt;next; pos != (head); \ pos = n, n = pos-&gt;...

    iod.rar_for each linux

    `for_each_linux` 标签进一步确认了这个程序或库是专门为Linux设计的,用于处理文件系统的迭代操作。 在Linux中,遍历目录通常涉及使用系统调用如 `opendir()`, `readdir()`, 和 `closedir()`。`opendir()` 打开一...

    PicFormat_C#_each7fl_

    在项目"each7fl"中,开发者可能使用了循环结构(foreach或for)遍历文件夹中的所有图像文件,对每个文件执行以上步骤,实现批量转换。这样的批量处理大大提高了效率,尤其对于处理大量图像时。 标签"C# each7fl...

    精品(2021-2022年)资料驱动注册的probe函数.docx

    2. **添加硬件设备**: 当向总线添加一个硬件设备时,首先会调用`device_add`,接着是`bus_attach_device`,然后是`device_attach`,再是`bus_for_each_drv`。 - `bus_for_each_drv`: 遍历总线上的所有驱动,执行一...

    matlab导入excel代码-utl_calculate_mode_for_each_row:关键词:sassqljoin合并大数据分析宏o

    matlab导入excel代码utl_calculate_mode_for_each_row 关键词:sas sql join合并大数据分析宏oracle teradata mysql sas社区stackoverflow statistics人工智慧AI Python R Java Javascript WPS Matlab SPSS Scala ...

    C++STL算法函数及作用大全总结

    `for_each`是一种通用的迭代器算法,它接受一个输入迭代器范围和一个函数对象,然后对区间内的每个元素调用该函数对象。这通常用于对容器中的所有元素执行某种操作,如打印、转换等。例如: ```cpp #include #...

    FunctionObject_函数对象

    这里通过`AddValue(10)`创建了一个`AddValue`对象,增量值为10,然后将其传递给`std::for_each`函数,对向量`iVec`中的每个元素执行加10的操作。 #### 总结 通过上述两个示例,我们可以看到函数对象的强大之处在于...

    ExcelVBA-master_fourth9bc_ExcelVBA_each497_vbaexcel_excelvba_

    9. **函数和子程序**:"each497"和"vbaexcel"可能就是这样的函数或子程序,它们可能实现了特定的业务逻辑,比如数据处理算法或复杂的计算。 10. **调试和测试**:VBA提供了调试工具,如断点、步进执行、查看变量值...

    for_each_practice:练习回购

    这个练习“for_each_practice”旨在帮助开发者熟练掌握`for...of`循环的基本用法和实践应用。在JavaScript的世界里,理解和运用好循环结构是至关重要的,因为它在处理数据和执行重复任务时扮演着核心角色。 `for......

    实验二 Linux 内核模块编程1

    `init_show_all_kernel_thread`函数首先定义了要输出的列标题,然后使用`for_each_process`宏遍历所有的进程结构`task_struct`。如果进程没有内存管理结构(`p-&gt;mm == NULL`),则认为它是内核线程,然后打印出它的...

    jQuery each函数源码分析_.docx

    `jQuery.each`函数接受三个参数:`object`(需要遍历的对象或数组)、`callback`(遍历处理回调函数)和`args`(可选的回调函数附加参数)。源码中,`each`函数首先判断`object`是否是对象,通过`length`属性排除...

    设备注册过程

    - **遍历设备并实例化**:通过`i2c_for_each_dev`函数遍历适配器上的所有设备,并为每个设备实例化相应的驱动。 #### Input 设备注册过程 Input 设备的注册过程主要包括以下几步: 1. **申请设备内存**:通过`...

    函数对象的写法等的实验报告

    测试一展示了基本的函数对象使用,通过`std::for_each`和一个简单的无状态函数对象`f`来累加vector中的所有元素。 测试二中,我们定义了一个名为`CSum`的类,它是一个有状态的函数对象,具有累加功能并能够返回结果...

Global site tag (gtag.js) - Google Analytics