首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有用户定义函数的输出向量

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

Stack Overflow用户
提问于 2013-12-10 07:24:43
回答 3查看 154关注 0票数 0

在下面的代码片段中,谁能告诉我如何在类中不嵌入add函数的情况下打印函数值输出(3,4,5,6,7)。

代码语言:javascript
运行
复制
#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;
}
EN

回答 3

Stack Overflow用户

发布于 2013-12-10 07:26:15

更改函数以获取引用:

代码语言:javascript
运行
复制
void add ( int& i)
{
  i+=2;
}

这将修改原始向量。如果这不是您想要的,请复制一份:

代码语言:javascript
运行
复制
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;
票数 2
EN

Stack Overflow用户

发布于 2013-12-10 07:31:34

for_each不修改传递给它的元素,也不通过引用传递这些元素。

代码语言:javascript
运行
复制
// 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:

代码语言:javascript
运行
复制
for_each(vec.begin(), vec.end(),[&] (int& i) {
    i += 2;
});

否则,您可以使用std::transform,并将源向量用作目标。

代码语言:javascript
运行
复制
std::transform(vec.begin(), vec.end(), vec.begin(), [] (int i) { 
    return i + 2; 
});
票数 1
EN

Stack Overflow用户

发布于 2013-12-10 07:31:43

为什么不简单地使用std::transform()呢?不需要add()函数。由于posted的add()函数没有副作用,因此无论如何都不能使用它。

代码语言:javascript
运行
复制
std::vector<int> vec = { 1, 2, 3, 4, 5 };
std::transform(vec.begin(), vec.end(), vec.begin(),
               [](int value) { return value + 2; });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20482968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档