13

C# では、オブジェクトのリスト (List myObjectList など) がある場合、次の方法でそのリストのサブセットを取得できます。

anotherMyObjectList = myObjectList.Where(x => x.isSomething()).Select(x => x).ToList();

サード パーティの C++ LINQ ライブラリ (標準ライブラリのみ、おそらくブースト) を使用したくない場合、C++ でこれを行う最善の方法は何ですか? これを実行したいインスタンスごとに関数を作成するのは簡単ですが、このタイプの操作を実行するために存在するフレームワークを知っておくとよいでしょう。

C++98、C++0x、または C++11 で答えが異なる場合は、違いを知っておくとよいでしょう。

4

3 に答える 3

3

std::copy_if()コンテナーのサブセットを作成するために使用できます。

#include <algorithm>
#include <iterator>
#include <list>

std::list<object> myObjectList, anotherMyObjectList;

// fill myObjectList somehow

std::copy_if(cbegin(myObjectList),
             cend(myObjectList),
             std::back_inserter(anotherMyObjectList),
             [](const object& o) { return o.IsSomething(); }); 

または C++98/03 を使用している場合:

#include <algorithm>
#include <iterator>
#include <list>

std::list<object> myObjectList, anotherMyObjectList;

// fill myObjectList somehow

struct is_something {
    bool operator()(const object&) {
        return object.IsSomething();
    }
};

std::copy_if(myObjectList.cbegin()
             myObjectList.cend(),
             std::back_inserter(anotherMyObjectList),
             is_something());
于 2013-09-06T10:50:52.543 に答える