1. ホーム
  2. c++

[解決済み] STLコンテナをフィルタリングする最新の方法とは?

2022-06-29 07:04:48

質問

何年も C# を使用してきた後、C++ に戻ってきたのですが、現代の - C++11 の - 方法はどのようなものなのでしょうか。つまり、この Linq クエリと同様のものをどのように実現するかということです。

var filteredElements = elements.Where(elm => elm.filterProperty == true);

要素のベクトルをフィルタリングするために ( strings この質問のために)?

私は心から、古いSTLスタイルのアルゴリズム(あるいは boost::filter_iterator を必要とする)ことを切に願います。 明示的なメソッド を定義することは、もう時代遅れなのでしょうか?

どのように解決するのですか?

cplusplus.comの例を見てください。 std::copy_if :

std::vector<int> foo = {25,15,5,-5,-15};
std::vector<int> bar;

// copy only positive numbers:
std::copy_if (foo.begin(), foo.end(), std::back_inserter(bar), [](int i){return i>=0;} );

std::copy_if の各要素に対してラムダ式を評価します。 foo の各要素に対してラムダ式を評価し、もしそれが true を返すと、その値を bar .

std::back_inserter の末尾に実際に新しい要素を挿入することができます。 bar (に挿入することができます。 push_back() を使って)、最初に必要なサイズにリサイズすることなく、イテレータを使うことができます。