標準ライブラリには、2つの範囲の交差に含まれるオブジェクトを反復処理できるものがありますか?特に2つの範囲の交差点に含まれるオブジェクトを反復処理します。
、関数オブジェクトaction
与えられ、Iはintersection
への挿入の必要なし
/* some container supporting a push_back operation */ intersection;
std::set_intersection(first1, last1, first2, last2,
std::back_inserter(intersection));
for (auto const& element : intersection)
action(element);
に相当するプログラムを取得します。もちろん、このようなコードを記述するのは簡単です。たとえば、標準ライブラリにはすでに存在するものがあることを願っています。例えば、
template<class InputIt1, class InputIt2, class UnaryFunction>
void for_each_in_intersection(InputIt1 first1, InputIt1 last1,
InputIt2 first2, InputIt2 last2, UnaryFunction f)
{
while (first1 != last1 && first2 != last2)
{
if (*first1 < *first2)
++first1;
else
{
if (!(*first2 < *first1))
f(*first1++);
++first2;
}
}
}
などがあります。
フル実施例であるあなただけ反復処理するためにポインタのコンテナをしたいですか? – wally
Range-v3、Boost.Iterator、Boost.Rangeなどはすべてこの機能を持っていますが、stdlibに直接はありません。 – ildjarn
@Muscampesterいいえ、[cppreference.com](http://en.cppreference.com/w/cpp/algorithm/set_intersection)の[std :: set_intersection'の可能な実装]を見てください。私は '* d_first ++ = * first1 ++; 'と同じコードを' action(* first1 ++); 'に置き換えて欲しいと思います。 – 0xbadf00d