2016-02-27 25 views
1

我想从一个向量的每个元素中减去一个数,如果写在传统的C++,它应该是这样的:减去矢量<int>的变量,使用的for_each和lambda功能

vector<int> A; // a vector of size N 
int value; // a value to subtracted 
for (int i = 0; i < N; i++) 
    A[i] -= value; 

但是现在,我想用for_each来使代码更清洁。例如,代码应该是这样的(以下是不正确的):

for_each(A.begin(), A.end(), [](int& x, int v) { x -= v; }); 

但拉姆达功能无法使用可变value

如何处理?

回答

4
vector<int> A { 10, 20, 30 }; // a vector of size N 
int value = 10; // a value to subtracted 

两个选择:

for_each(A.begin(), A.end(), [value](auto& x) { x -= value; }); 

或者在捕获列表

for (auto& x : A) 
    x -= value; 
+0

不被使用的载体在匿名lambda函数中。没有理由要制作副本。 – Jts

+0

你是对的!我不知道我为什么这么想。 –

+0

如果我想使用多个变量,说x = x + value1 - value2,[value1,value2](auto&x){x = x + value1 - value2; } 这是对的吗? –

0

看跌期权的价值和它编译就好:

std::for_each(v.begin(), v.end(), [value](int &x) { x -= value; });