具有用户定义函数的输出向量

时间:2013-12-09 23:24:43

标签: c++ stl foreach

在下面的代码片段中,任何人都可以让我知道如何打印仿函数值输出(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;
}

3 个答案:

答案 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; });