2013-06-13 44 views
2

我正在学习C++,所以自然我一直在试图弄清楚我能做什么,不能做什么。我写了一小段代码来处理lambda表达式和字符串,但它似乎给了我一些问题:S。for_each将字符串连接到一个向量中的所有字符串

我有两个字符串存储在向量中,一个是巧克力,另一个是香草。我想连接fudge到最后。我宣布关联的库。一切都编译并运行。但没有连接:S任何帮助,将不胜感激。提前致谢。

void main() 
{ 

    vector<string> ramzy; 
    ramzy.push_back("chocolate"); 
    ramzy.push_back("vanilla"); 

    for_each(ramzy.begin(),ramzy.end(), 
     [](string word)->string{ 
      string i = word + " fudge"; 
      return (i); 
     }); 

    cout << ramzy[0] << endl << ramzy[1] << endl; 

} 

的输出如下显示:

chocolate 
vanilla 

希望的输出是下面显示:

Chocolate Fudge 
Vanilla Fudge 

回答

7

reference来自:

std::for_each 

将给定的函数对象f应用于取值 中的每个迭代器,范围为[first, last),依次排列。 如果InputIt是 可变迭代器,则f可以通过 解除引用的迭代器修改该范围的元素。 如果f返回结果,结果将被忽略

所以,你有你的拉姆达变化到:

[](string& word) 
{ 
    word += " fudge"; 
} 
+0

它工作没有for_each rewirte。我想我需要重新学习我的lambda:S但是,谢谢你的帮助。 – Ramzicle

+0

@Ramzicle *“我想我需要重新学习我的lambda” - 不,只有标准算法的工作原理,与lambda无关。 –

4

相反的for_each的,使用变换您的需要。

std::transform(ramzy.begin(),ramzy.end(),ramzy.begin(),[](const std::string& str) 
      { 
       return str + " fudge"; 
      }); 
+0

我更喜欢'std :: transform'到'std :: for_each',但是最好不要把'const std :: string&'放到你的lambda中。 –

相关问题