2016-02-27 44 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; });