Algoritmalar

Algoritmalar, C++ Standart Kitaplığı'nın temel bir parçasıdır. Algoritmalar kapsayıcılarla değil yineleyicilerle çalışır. Bu nedenle, C++ Standart Kitaplığı kapsayıcılarının tümü değilse, aynı algoritma çoğu tarafından kullanılabilir. Bu bölümde C++ Standart Kitaplığı algoritmalarının kuralları ve terminolojisi ele alınmaktadır.

Açıklamalar

Algoritma işlev şablonlarının açıklamalarında birkaç kısa tümcecik kullanılır:

  • "[A, B)" aralığındaki tümcecik, A ile başlayan ancak B'ye kadar olmayan sıfır veya daha fazla ayrık değerin sırası anlamına gelir. Aralık yalnızca B'ye A'dan ulaşılabiliyorsa geçerlidir; A'yı N (N = A) nesnesinde depolayabilir, nesneyi sıfır veya daha fazla artırabilirsiniz (++N) ve nesnenin sınırlı sayıda artıştan (N == B) sonra B'ye eşit olmasını sağlayabilirsiniz.

  • "[A, B)" aralığındaki her N ifadesi, N'nin A değeriyle başladığı ve B değerine eşit olana kadar sıfır veya daha fazla artırıldığını gösterir. Olay N == B aralıkta değildir.

  • "[A, B) aralığındaki X gibi en düşük N değeri" tümceciği, X koşulu karşılanıncaya kadar [A, B) aralığındaki her N için X koşulunun belirlendiği anlamına gelir.

  • "[A, B) aralığındaki X gibi en yüksek N değeri" tümceciği, X'in [A, B) aralığındaki her N için belirlendiği anlamına gelir. İşlev, X koşulu her karşılandığında N'nin bir kopyasını K'de depolar. Böyle bir depo oluşursa işlev, B'ye eşit olan N'nin son değerini K değeriyle değiştirir. Ancak çift yönlü veya rastgele erişim yineleyicisi için, N'nin aralıktaki en yüksek değerle başladığı ve X koşulu karşılanana kadar aralık üzerinde azalabileceği anlamına da gelebilir.

  • X ve Y'nin rastgele erişim yineleyicileri dışında yineleyici olabileceği X - Y gibi ifadeler matematiksel anlamda tasarlanmıştır. böyle bir değeri belirlemesi gerekiyorsa işlevin işlecini - değerlendirmesi gerekmez. Aynı durum X N ve X - + N gibi ifadeler için de geçerlidir; burada N bir tamsayı türüdür.

Çeşitli algoritmalar, sonuç elde etmek için ile operator==gibi çift tabanlı bir karşılaştırma gerçekleştiren bir bool koşul kullanır. koşul işlevi veya onun yerine geçen herhangi bir işlev operator==, işlenenlerinden herhangi birini değiştirmemelidir. Her değerlendirildiğinde aynı bool sonucu vermelidir ve işlenenin yerine işlenenlerden birinin bir kopyası alınırsa aynı sonucu vermesi gerekir.

Çeşitli algoritmalar, bir dizideki öğe çiftlerine katı bir zayıf sıralama dayatması gereken bir koşulu kullanır. Koşul koşulu için(X, Y):

  • Katı, pred(X, X) öğesinin false olduğu anlamına gelir.

  • Zayıf, X ve Y'nin ise eşdeğer bir sıralamaya sahip olduğu anlamına gelir!pred(X, Y) & !pred(Y, X) (X == Y'nin tanımlanması gerekmez).

  • Sıralama, pred(X, Y) && pred(Y, Z) öğesinin pred(X, Z) anlamına gelir.

Bu algoritmalardan bazıları X<Y koşulunu örtük olarak kullanır. Genellikle katı zayıf sıralama gereksinimini karşılayan diğer koşul: X>Y, less(X, Y) ve greater(X, Y). Ancak X= Y ve> X<= Y gibi koşulların bu gereksinimi karşılamadığını unutmayın.

[, ) aralığında yineleyiciler tarafından belirlenen öğe dizisi, [First0, Last) aralığındaki her N için ve aralıktaki her M için (N, LastLastFirst - - First) koşul !(< *(First + M) < *(First + N)) doğrudur. (Öğelerin artan düzende sıralandığını unutmayın.) koşul işlevi veya onun yerine geçen herhangi bir işlev operator<, işlenenlerinden herhangi birini değiştirmemelidir. Her değerlendirildiğinde aynı bool sonucu vermelidir ve işlenenin yerine işlenenlerden birinin bir kopyası alınırsa aynı sonucu vermesi gerekir. Ayrıca, karşılaştırır işlenenler üzerinde katı bir zayıf sıralama dayatması gerekir.

[, ) aralığında yineleyiciler tarafından belirlenen öğe dizisi, [1, - FirstLast ) aralığındaki her N için koşula göre operator< sıralanmış bir yığındır !(FirstLast *İlk< *(First + N)) doğrudur. (İlk öğe en büyük öğedir.) İç yapısı, aksi takdirde yalnızca , pop_heapve push_heapşablon işlevleri make_heaptarafından bilinir. Sıralı dizide olduğu gibi, koşul işlevi operator<veya onun yerine geçen herhangi bir işlev, işlenenlerinden birini değiştirmemelidir ve karşılaştırdığı işlenenlere katı bir zayıf sıralama uygulamalıdır. Her değerlendirildiğinde aynı bool sonucu vermelidir ve işlenenin yerine işlenenlerden birinin bir kopyası alınırsa aynı sonucu vermesi gerekir.

C++ Standart Kitaplığı algoritmaları ve <numeric> üst bilgi dosyalarında <algorithm> bulunur.

Ayrıca bkz.

C++ Standart Kitaplığı Başvurusu
C++ Standart Kitaplığında İş Parçacığı Güvenliği