在下面的代码片段中,谁能告诉我如何在类中不嵌入add函数的情况下打印函数值输出(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;
}发布于 2013-12-10 07:26:15
更改函数以获取引用:
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;发布于 2013-12-10 07:31:34
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;
});发布于 2013-12-10 07:31:43
为什么不简单地使用std::transform()呢?不需要add()函数。由于posted的add()函数没有副作用,因此无论如何都不能使用它。
std::vector<int> vec = { 1, 2, 3, 4, 5 };
std::transform(vec.begin(), vec.end(), vec.begin(),
[](int value) { return value + 2; });https://stackoverflow.com/questions/20482968
复制相似问题