4 Nisan 2018 Çarşamba

range adaptors filtered Sınıfı

Giriş
Şu satırı dahil ederiz.
#include <boost/range/adaptor/filtered.hpp>
Nasıl Çalışır
filtered metodu filtered_range nesnesi döner. Bu nesnenin "operator |" metodu vardır. Bu metod filtered_range döner.

Metodun için şöyle
template< class SinglePassRange, class Predicate >
inline filtered_range<Predicate, SinglePassRange>
operator|(SinglePassRange& r,
          const filter_holder<Predicate>& f)
{
    BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept<SinglePassRange>));
    return filtered_range<Predicate, SinglePassRange>( f.val, r );
}

Constructor - lamda
Şöyle yaparız.
vector<int> vec = {0,1,2,3,4,5,6,7,8,9,10};
auto r = vec | boost::adaptors::filtered([](auto&& v) { return v % 2; });
for (auto i: r)
    std::cout << i << '\n';
}
Constructor - predicate
Aslında predicate yine lambda olarak tanımlı :)
Örnek
Şöyle yaparız.
char const* input = "AABAAB";

unsigned counter{};
auto pred = [&counter](auto const&){ return ++counter % 3; };
boost::copy(
  boost::make_iterator_range (input, input+strlen(input)) |
  boost::adaptors::filtered  (pred),
  std::ostream_iterator<char>(cout)
);
Örnek
Şöyle yaparız.
std::vector<int> input;
input += 1,2,3,4,5,6,7,8,9;

boost::copy(input | filtered(is_even()),
            std::ostream_iterator<int>(std::cout, ","));

Hiç yorum yok:

Yorum Gönder