首页 \ 问答 \ 如何使用带有其他参数的for_each?(How to use for_each with additional parameters?)

如何使用带有其他参数的for_each?(How to use for_each with additional parameters?)

我试图找出如何使用for_each() 。 首先,我改变了这个循环

for(int i = 0; i < myvector.size(); ++i){
    myvector[i].a.b. = true;
}

auto enable [](Myvect &mv) {mv.a.b = true;};
for_each(myvector.begin(), myvector.end(), enable);

这很好用。


现在我想为以下循环使用for_each构造:

for(int i = 0; i < myvector.size(); ++i){
    foo(local_var, myvector[i]);
}

这可能吗?


I am trying to figure out how is for_each() used. First, I transformed this loop

for(int i = 0; i < myvector.size(); ++i){
    myvector[i].a.b. = true;
}

into

auto enable [](Myvect &mv) {mv.a.b = true;};
for_each(myvector.begin(), myvector.end(), enable);

This worked fine.


Now I would like to use the for_each construct for the following loop:

for(int i = 0; i < myvector.size(); ++i){
    foo(local_var, myvector[i]);
}

Is this possible?


原文:https://stackoverflow.com/questions/24576935
更新时间:2020-10-16 22:10

最满意答案

你可以简单地把foo放在lambda函数中:

for_each( myvector.begin(), myvector.end(), 
                           [local_var](Myvect& mv) // notice reference
                           { 
                           // Assuming you want to modify mv
                              foo(local_var, mv ); 
                           }
        );

You can simply put foo inside lambda function :

for_each( myvector.begin(), myvector.end(), 
                           [local_var](Myvect& mv) // notice reference
                           { 
                           // Assuming you want to modify mv
                              foo(local_var, mv ); 
                           }
        );
2014-07-04

相关问答

更多

std :: for_each,用引用参数调用成员函数(std::for_each, calling member function with reference parameter)

这是<functional>设计中的一个问题。 你必须使用boost :: bind或者tr1 :: bind。 This is a problem with the design of <functional>. You either have to use boost::bind or tr1::bind.

是否可以使用具有独立输入参数的函数使用STL for_each算法?(Is it possible to use the STL for_each algorithm using a function with independent input parameters?)

各种std::bind1st / std::bind2nd和Boost.bind库是为了解决您的问题而创建的(几乎所有使用STL算法的人都会遇到这种情况),但通常他们只是一种解决方法,而不是解决方案。 幸运的是,随着即将推出的C ++标准,期待已久的lambda函数的添加应该能够明确地解决问题。 但是请注意,由于std::for_each调用传递解引用迭代器的函数(即正在考虑的实际值),因此AddToUpdate函数不应接受迭代器,而应接受值。 在这种情况下,它会是这样的: Update upda ...

为什么使用for_each错了?(why this is wrong about using for_each?)

您正在混合const和非const迭代器。 那些是不同的类型,因此模板参数推断失败。 使用其中任何一个作为两个参数: std::for_each(vec_int.crbegin(), vec_int.crend(), [](const int & i) { cout << i;}); ^ You are mixing const and non-const iterators. Those are differen ...

我应该使用std :: for_each吗?(Should I use std::for_each?)

使用std::for_each而不是一个旧的学校循环(甚至是新的C ++ 0x范围循环)有一个优点:您可以查看语句的第一个单词,并且您确切地知道该语句的作用。 当你看到for_each ,你知道在这个范围内的每一个元素都要对lambda进行一次操作(假设没有异常被抛出)。 在处理每个元素之前,不可能早点突破循环,并且不可能多次跳过元素或评估一个元素的循环体。 使用for循环,您必须阅读整个循环体才能知道它的作用。 它可能具有更改控制流的continue , break或return语句。 它可能有 ...

使用for_each和tolower()(Using for_each with tolower())

for_each的返回值是你传递它的函数 - 在这种情况下, low 。 所以这: clean = for_each(temp.begin(), temp.end(), low); 相当于: for_each(temp.begin(), temp.end(), low); clean = low; 当你真正想要的可能是这样的: for_each(temp.begin(), temp.end(), low); // note: modifies temp clean = temp; (或者你可 ...

如何使用std :: for_each?(How to use std::for_each?)

你可以使用std::mem_fun来做到这一点: std::for_each(list.begin(), list.end(), std::mem_fun(&Interface::run)); You can do this using std::mem_fun: std::for_each(list.begin(), list.end(), std::mem_fun(&Interface::run));

每个in,in或for_each哪个更适合?(Which is preferable for each, in or for_each?)

正如Stephan T. Lavavej几天前在“GoingNative 2012”会议上指出的那样,“官方”基于范围的for循环将成为即将发布的新版Visual Studio的一部分。 所以这将是一条路: for(auto s : strings1) { _tprintf(_T("%s"), s); } 或者使用引用来减少按值使用的复制工作: for (auto &s : strings1) .... 编辑:上面提到的GoingNative谈话可以在这里找到 As Stephan T ...

带有1个参数的成员函数的std :: for_each(std::for_each on a member function with 1 argument)

尽管someFunc是具有一个参数的成员,但mem_fun_ref使用隐含的第一个参数“myClass”。 您想使用向量的项目作为第二个参数。 使用for_each和mem_fun_ref可能没有负面的性能影响。 编译器将生成可比较的代码。 但是,唯一的方法是确定基准:) std::for_each(a.begin(), a.end(), std::bind1st( std::mem_fun_ref( &MyClass:: ...

调用宏中带有两个或更多参数的FOR_EACH宏(FOR_EACH macro with two or more params in call macro)

根据我的判断,我会回答这个问题(因为它在少数情况下可能有用)。 我修改了你发布的代码,因此它需要两个参数( 演示 ): #include <iostream> #define EXPAND(x) x #define FOR_EACH_2(what, delimiter, x, y) what((x), (y)) #define FOR_EACH_4(what, delimiter, x, y, ...)\ what((x), (y)) delimiter \ EXPAND(FOR_EAC ...

如何使用带有其他参数的for_each?(How to use for_each with additional parameters?)

你可以简单地把foo放在lambda函数中: for_each( myvector.begin(), myvector.end(), [local_var](Myvect& mv) // notice reference { // Assuming you want to modify mv ...

相关文章

更多

最新问答

更多
  • 如何在CSS中进行自定义文本编辑并在学校项目中获取错误(How to do custom text editing in CSS and getting a error in a school project)
  • 获取列表中最长的元素(Get the longest element of a list)
  • Files.copy(Path,Path)是否创建目录?(Does Files.copy(Path,Path) create directories?)
  • 如何在ajax请求完成后1秒递归调用函数?(How to recursively call a function 1 second after an ajax request is done?)
  • 如何统计销售量,城市,商品使用情况的客户oracle(How to statistics sales, city, customer of goods use oracle)
  • 无法从命令行覆盖pom maven-surefire-plugin(Cannot overwrite pom maven-surefire-plugin from command line)
  • 根据Select2 4.0中的值应用css类(Applying css class according to value in Select2 4.0)
  • 使用Jackson(Polymorphic)进行反序列化时缺少字段(Missing field when deserializing using Jackson (Polymorphic))
  • 使用PHP的即时警报通知功能(Instant Alert notification feature using PHP)
  • 与以前的密码相比(Comparing with previous passwords)
  • 从现金流中获取特定行(Getting specific line from Cash Flow)
  • Citrix:无法使用MDKToolkit包装apk(Citrix: can't wrap apk using MDKToolkit)
  • 流星角色包的灵活性如何?(How flexible is meteor-roles package?)
  • 带有多个按钮的Google扩展程序(Google Extension with more than one button in the toolbar)
  • php setTimezone同时出现不同的结果(php setTimezone different result for the same time)
  • 搜索不使用jQuery调用json(Search not working using jQuery with call to json)
  • 如何打印文件的内容?(How do I print out the contents of a file? C++ File Stream)
  • Django自定义包含标签(Django Custom Inclusion Tags)
  • Java Jtree mouseEvent如果没有选择任何内容(Java Jtree mouseEvent if nothing is selected)
  • 通过哈希对象循环获取次数(Get number of times in loop over Hash object)
  • Python转义序列复杂输出(Python escape sequence complex output)
  • 将列表对象中的字符串转换为逗号分隔(Convert string in list objects to comma separated)
  • 如何限制特定字符在laravel 5.4中的字符串?(How to limit string in laravel 5.4 from specific char?)
  • 如何从浏览器调用appengine servlet(how to call appengine servlet from browser)
  • Excel条件格式更改整个行颜色(Excel conditional formatting to change entire row color)
  • 在JTable中显示数据库中的数据(Displaying data from database in JTable)
  • 在android中附加文件的问题(Issue on appending a file in android)
  • 在数组中输入值(Make in input value as in array)
  • Haml + ActionMailer - Rails?(Haml + ActionMailer - Rails?)
  • 在tomcat上部署的grails war没有连接到数据库(grails war deployed on tomcat is not connecting to database)