2

map条件に応じて、前方または後方を反復するメソッドがあります。操作自体は方向に依存しないため、次のようなことができるようにしたいと考えています。

std::map<int, int> some_map;
auto iter = some_condition ? some_map.begin() : some_map.rbegin();
for (; iter != some_condition ? some_map.end() : some_map.rend(); ++iter)
{
    //something to do with *iter
}

テンプレート関数を使用してこれを実行できるはずですが (そうですか?)、少しやり過ぎのように思えます。

テンプレートなしで、1 つの関数でそれを行う方法はありますか? 多分使用して<algorithm>

4

1 に答える 1

2

そうする1つの方法は、最初に各要素で何をしたいのかを考え出すことです.

auto f = [](const std::pair<int, int> &p) { std::cout << p.first << std::endl; };

次に、次の方向に分岐できます。

if(forward)
    std::for_each(std::begin(m), std::end(m), f);
else
    std::for_each(std::rbegin(m), std::rend(m), f);
于 2016-09-09T08:20:53.110 に答える