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.
partition
Algoritma şuna benzer.
lambda ile kullanım örneği
Elimizde şöyle bir liste olsun. hello olmayan elemanları listenin sonuna atmak isteyelim.
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.
partition
Algoritma şuna benzer.
template<class ForwardIt, class UnaryPredicate>
ForwardIt partition(ForwardIt first, ForwardIt last, UnaryPredicate p)
{
if (first == last) return first;
ForwardIt part(first++);
if (first == last) return p(*part) ? first : part;
while (first != last) {
if (p(*part))
++part;
else if (p(*first)) {
iter_swap(part, first);
++part;
}
++first;
}
return part;
}
Açıklaması şöyleYani n tane eleman varsa ForwardIterator kullanıldığı için en fazla n-1 tane swap yapılır. Eğer BidirectionalIterator kullanılırsa daha az swap yapılır.Complexity
Exactlystd::distance(first,last)
applications of the predicate and at moststd::distance(first,last)
swaps. If ForwardIt meets the requirements of BidirectionalIterator at moststd::distance(first,last)/2
swaps are done.
lambda ile kullanım örneği
Elimizde şöyle bir liste olsun. hello olmayan elemanları listenin sonuna atmak isteyelim.
list<string> s;
Liste şöyle bölümlenir.std::partition(
std::begin(s),
std::end(s),
[](const string &w){return w != "hello";});
partition_pointstd::stable_partition yazısına taşıdım.
nth_element
std::nth_element yazısına taşıdım.
partial_sort
Örnek yaz
partial_sort_copy
Girdi olarak kullanılan veri yapısının sırasını değiştirmez. Sıralanmış veri çıktı olarak verilen veri yapısına kopyalanır.
sort
std::sort yazısına taşıdım
stable_sort
Açıklaması şöyle
İmzası şöyle
std::nth_element yazısına taşıdım.
partial_sort
Örnek yaz
partial_sort_copy
Girdi olarak kullanılan veri yapısının sırasını değiştirmez. Sıralanmış veri çıktı olarak verilen veri yapısına kopyalanır.
sort
std::sort yazısına taşıdım
stable_sort
Açıklaması şöyle
Eğer sıralanacak elemen sayısı değeri belirtilmemiş N'den küçükse bellekten tasarruf eden bir algoritma kullanılır. Eğer N'den büyükse zamandan tasarrruf eden bir algoritma kullanılır.O(N·log^2(N)), where N = std::distance(first, last) applications of cmp. If additional memory is available, then the complexity is O(N·log(N)).
İmzası şöyle
template<class RandomAccessIterator>
void stable_sort(RandomAccessIterator first, RandomAccessIterator last);
template<class RandomAccessIterator, class Compare>
void stable_sort(RandomAccessIterator first, RandomAccessIterator last,
Compare comp);
Hiç yorum yok:
Yorum Gönder