7 Ağustos 2019 Çarşamba

STL Transform Algoritmaları

Giriş
STL algoritmalarını işlevlerine göre gruplamak anlamayı çok daha kolaylaştırıyor. Aşağıdaki algoritmalar sıralı dizileri yine sıralı olarak birleştirme algoritmalarını gösteriyor.

transform - UnaryOperation 
std::transform metodu yazısına taşıdım.

transform_if
Böyle bir algoritma yok ancak yazması kolay. Şöyle yaparız.
template<typename InputIterator, typename OutputIterator, typename Predicate,
typename TransformFunc>
OutputIterator transform_if(InputIterator&& begin, InputIterator&& end, 
    OutputIterator&& out, Predicate&& predicate, TransformFunc&& transformer
) {
  for(; begin != end; ++begin, ++out) {
    if(predicate(*begin))
       *out = transformer(*begin);
  }
  return out;
}
Çağırmak için şöyle yaparız.
std::vector<Foo> get_valid_foos_modern(const std::vector<FooBar>& foobars){
  std::vector<Foo> valid_foos;
  transform_if(foobars.begin(), foobars.end(), 
        std::back_inserter(valid_foos), 
        [](const auto& foobar) { return foobar.is_valid;},
        [](auto const& foobar) { return foobar.foo;}
    );
    return valid_foos;
}

Hiç yorum yok:

Yorum Gönder