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.
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