2

我正在学习 c++,所以自然而然地我一直在胡闹,试图弄清楚我能做什么,不能做什么。我写了一小段代码来处理 lambda 和字符串,但它似乎给了我一些问题:S。

我在向量中存储了两个字符串,一个是巧克力,另一个是香草。我想将软糖连接到最后。我正在声明相关的库。一切都编译并运行。但没有任何东西可以连接: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
4

2 回答 2

7

参考

std::for_each

按顺序将给定的函数对象f应用于取消引用 range 中的每个迭代器的结果[first, last)IfInputIt是一个可变迭代器,f可以通过取消引用的迭代器来修改范围内的元素如果 f 返回结果,则忽略结果

因此,您必须将 lambda 更改为:

[](string& word)
{
    word += " fudge";
}
于 2013-06-13T02:48:02.400 回答
5

而不是 for_each,请根据需要使用转换。

std::transform(ramzy.begin(),ramzy.end(),ramzy.begin(),[](const std::string& str) 
          { 
                return str + " fudge"; 
           });
于 2013-06-13T07:44:32.093 回答