2013-03-28 48 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; 
相关问题