2013-03-28 55 views
0

我有一個std::deque<float> k{3, 4, 5, 0};如何將一個函數應用於一個deque的每個元素?

如何將函數應用於每個元素?

float o(float k) {if (k > 4) return k - CONSTDIFF;}; 

應用此功能,每一個元素後,其結果將是:

k == {3, 4, 5-CONSTDIFF, 0}; 
+0

請在將來的問題中稍微清楚一點。 – 2013-03-28 14:57:58

回答

3

你可以使用std::transform和lambda表達式:

std::transform(
    k.begin(), 
    k.end(), 
    k.begin(), 
    [](float f) { 
     return (f > 4.0f) ? (f - CONSTDIFF) : f; 
    } 
); 

這是一個C++ 11溶液。如果您使用C++ 03,您可以將該lambda表達式移到一個自由函數中。

1

您可以使用for_each()做到這一點。

http://www.cplusplus.com/reference/algorithm/for_each/

實施例:

#include <iostream> 
#include <deque> 
#include <algorithm> 

using namespace std; 
float CONSTDIFF=1; 
void o(float& k) {if (k > 4) k-= CONSTDIFF;}; 

int main() 
{ 
    deque<float> k; 
    k.push_back(3); 
    k.push_back(4); 
    k.push_back(5); 
    k.push_back(0); 


    for_each(k.begin(),k.end(),o); 


    for(deque<float>::iterator i=k.begin(); i!=k.end(); i++) 
    { 
     cout << *i << endl; 
    } 
    return 0; 
} 
0
for_each(k.begin(),k.end(),[=](float x) 
      {return x>4.0f ? x-CONSTDIFF : x ;}); 

而這個?

for(auto&x:k) if (x>4) x-=CONSTDIFF; 
相關問題