Giriş
İmzası şöyle.
İmzası şöyle.
template<class ForwardIterator, class Predicate>
ForwardIterator partition_point(ForwardIterator first, ForwardIterator last,
Predicate pred);
Bir bölünlenmenin nerede bittiğini bulur. lower_bound şu algoritma ile yapılabilirdi. Şöyle yaparız.An iterator mid such that all_of(first, mid, pred) and none_of(mid, last, pred) are both true.
template <typename ForwardIterator, typename T>
ForwardIterator lower_bound(ForwardIterator first, ForwardIterator last,
T const& value)
{
return partition_point(first, last, [&](auto const& elem) {
return elem < value;
});
}
template <typename ForwardIterator, typename T, typename Compare>
ForwardIterator lower_bound(ForwardIterator first, ForwardIterator last,
T const& value, Compare comp)
{
return partition_point(first, last, [&](auto const& elem) {
return comp(elem, value);
});
}
Örnek
Elimizde şöyle bir kod olsun
Elimizde şöyle bir kod olsun
const std::vector<int> v{1, 2, 3, 4, 5, 6, 7, 8};
Şöyle yaparız.auto pred = [](int e){ return e < 5; }
assert(std::is_partition(v.begin, v.end(), pred));
auto it2 = std::partition_point(v.begin, v.end(), pred);
assert(it1 == it2); // *it1 = 5
Hiç yorum yok:
Yorum Gönder