在下面的代码片段中,任何人都可以让我知道如何打印仿函数值输出(3,4,5,6,7) 在课堂上嵌入添加功能。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void add ( int i)
{
i=i+2;
}
int main()
{
vector <int> vec ={1,2,3,4,5};
for_each(vec.begin(), vec.end(),add);
for (auto i:vec)
{
cout<<i;
}
return 1;
}
答案 0 :(得分:2)
更改功能以参考:
void add ( int& i)
{
i+=2;
}
这将修改原始矢量。如果不需要,请复制一份:
vector <int> vec ={1,2,3,4,5};
vector<int> vec2(vec);
for_each(vec2.begin(), vec2.end(), add);
for (auto i : vec2)
cout<<i;
答案 1 :(得分:1)
for_each
不会修改传递给它的元素或通过引用传递它们。
// Example implementation
template<class InputIterator, class Function>
Function for_each(InputIterator first, InputIterator last, Function fn)
{
while (first!=last) {
fn (*first);
++first;
}
return fn;
}
如果你有c ++ 11,你可以使用lambda:
for_each(vec.begin(), vec.end(),[&] (int& i) {
i += 2;
});
否则,您可以使用std::transform
,并将源向量用作目标。
std::transform(vec.begin(), vec.end(), vec.begin(), [] (int i) {
return i + 2;
});
答案 2 :(得分:0)
为什么不简单地使用std::transform()
?无需add()
功能。由于发布的add()
函数没有副作用,因此无论如何都无法使用。
std::vector<int> vec = { 1, 2, 3, 4, 5 };
std::transform(vec.begin(), vec.end(), vec.begin(),
[](int value) { return value + 2; });