我正在学习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
答案 0 :(得分:7)
来自reference:
std::for_each
将给定的函数对象
f
应用于解除引用的结果 按顺序排列[first, last)
范围内的每个迭代器。 如果InputIt
是 可变迭代器,f
可以通过修改范围的元素 解除引用的迭代器。 如果f返回结果,则忽略结果。
所以,你必须将你的lambda改为:
[](string& word)
{
word += " fudge";
}
答案 1 :(得分:4)
而不是for_each,根据需要使用transform。
std::transform(ramzy.begin(),ramzy.end(),ramzy.begin(),[](const std::string& str)
{
return str + " fudge";
});