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};
4

3 に答える 3

3

std::transformとラムダ式を使用できます。

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

これは C++11 ソリューションです。C++03 を使用している場合は、そのラムダ式をフリー関数に移動できます。

于 2013-03-28T14:52:32.760 に答える
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;
}
于 2013-03-28T14:50:27.980 に答える
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; 
于 2013-03-28T14:58:01.737 に答える