`
田庆阳
  • 浏览: 6460 次
  • 性别: 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
分享到:
评论

相关推荐

    C++11/14 线程中使用Lambda函数的方法

    多线程中使用lambda 在本篇文章中,主要介绍lambda函数在多线程中的使用。 先从下面的例子开始吧: ...在此基础上我们将创建5个线程,然后把线程放进一个vector容器中, 用for_each()完成线程的汇合(join): #

    JavaScript直接调用函数与call调用的区别实例分析

    在上面的`each`函数中,我们使用`call`方法来动态地为数组中的每个元素调用一个函数,而函数内部的`this`指向我们并不关心,因此传入`null`。 `call`方法和直接调用最主要的区别在于,`call`方法可以动态地改变函数...

    PHP基础讲义pdf版含视频下载地址。

    4. 数组的for循环与foreach循环 87 5. 数组游标操作 88 6. list与each 91 7. 数组下标的效率探讨 94 8. 常用数组函数讲解 95 9. 数组面试题讲解 104 五、 Mysql 105 1. 后续教学日程及mysql安装 105 2. PHP连接mysql...

    前端十万字八股文面试笔记

    8. **路由拦截**:`beforeEach`和`afterEach`钩子用于路由守卫,进行权限控制、数据预加载等。 9. **路由传参**:通过URL查询参数、命名路由、`props`传递数据。 这些只是前端面试中的一部分关键知识点,全面掌握...

    Javascript 链式调用实现代码(参考jquery)

    在`each`方法内部,使用`for`循环遍历数组,并用`call`方法将`this`指向当前遍历到的DOM元素,然后调用传入的函数`fn`。 #### 3. 方法setStyle(prop, value) `ele`对象的原型上还定义了一个名为`setStyle`的方法,...

    training_curriculum

    2. **控制结构**:Ruby中的控制结构包括条件语句(if/else,case)、循环(for,while,until,each)和块(block)。块是Ruby的一个独特特性,可以配合方法使用,实现简洁的代码结构。 3. **函数与方法**:Ruby中...

    asp连接数据库代码实例

    for each query_name in request.querystring for i=0 to ubound(chk) if instr(lcase(request.querystring(query_name)),chk(i))&lt;&gt;0 then response.write \"&lt;script language=javascript&gt;alert(\'传参错误!参数...

Global site tag (gtag.js) - Google Analytics