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;
}
分享到:
相关推荐
多线程中使用lambda 在本篇文章中,主要介绍lambda函数在多线程中的使用。 先从下面的例子开始吧: ...在此基础上我们将创建5个线程,然后把线程放进一个vector容器中, 用for_each()完成线程的汇合(join): #
在上面的`each`函数中,我们使用`call`方法来动态地为数组中的每个元素调用一个函数,而函数内部的`this`指向我们并不关心,因此传入`null`。 `call`方法和直接调用最主要的区别在于,`call`方法可以动态地改变函数...
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`传递数据。 这些只是前端面试中的一部分关键知识点,全面掌握...
在`each`方法内部,使用`for`循环遍历数组,并用`call`方法将`this`指向当前遍历到的DOM元素,然后调用传入的函数`fn`。 #### 3. 方法setStyle(prop, value) `ele`对象的原型上还定义了一个名为`setStyle`的方法,...
2. **控制结构**:Ruby中的控制结构包括条件语句(if/else,case)、循环(for,while,until,each)和块(block)。块是Ruby的一个独特特性,可以配合方法使用,实现简洁的代码结构。 3. **函数与方法**:Ruby中...
for each query_name in request.querystring for i=0 to ubound(chk) if instr(lcase(request.querystring(query_name)),chk(i))<>0 then response.write \"<script language=javascript>alert(\'传参错误!参数...