2013-03-28 2 views
0

나는 std::deque<float> k{3, 4, 5, 0};입니다.큐의 각 요소에 함수를 적용하는 방법은 무엇입니까?

각 요소에 함수를 적용하려면 어떻게해야합니까?

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

각 요소에이 기능을 적용하면 결과는 다음과 같습니다

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

향후 질문에서 좀 더 명확히하십시오. –

답변

3

당신은 std::transform 및 람다 식을 사용할 수 있습니다

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

이것은 C++ (11) 솔루션입니다. C++ 03을 사용하고 있다면 람다 식을 자유 함수로 옮길 수 있습니다.

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; 
관련 문제