Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Algorytmy są podstawową częścią standardowej biblioteki języka C++. Algorytmy nie działają z samymi kontenerami, ale z iteratorami. W związku z tym ten sam algorytm może być używany przez większość, jeśli nie wszystkie kontenery biblioteki standardowej języka C++. W tej sekcji omówiono konwencje i terminologię algorytmów standardowej biblioteki języka C++.
Uwagi
Opisy szablonów funkcji algorytmu używają kilku skróconych fraz:
Fraza "w zakresie [A, B)" oznacza sekwencję zera lub większej liczby dyskretnych wartości rozpoczynających się od A do, ale nie w tym B. Zakres jest prawidłowy tylko wtedy, gdy B jest osiągalny z A, można przechowywać A w obiekcie N (N = A), można zwiększać obiekt zero lub więcej razy (++N) i mieć obiekt porównywany z B po skończonej liczbie przyrostów (N == B).
Wyrażenie "każdy N w zakresie [A, B)" oznacza, że N zaczyna się od wartości A i jest zwiększana zero lub więcej razy, dopóki nie będzie równa wartości B. Przypadek N == B nie znajduje się w zakresie.
Wyrażenie "najniższa wartość N w zakresie [A, B), takie jak X" oznacza, że warunek X jest określany dla każdego N w zakresie [A, B) do momentu spełnienia warunku X.
Wyrażenie "najwyższa wartość N w zakresie [A, B), takie jak X" oznacza, że X jest określany dla każdego N w zakresie [A, B). Funkcja przechowuje w K kopię N za każdym razem, gdy warunek X jest spełniony. Jeśli wystąpi taki magazyn, funkcja zastępuje końcową wartość N, która jest równa B, z wartością K. W przypadku iteratora dwukierunkowego lub losowego dostępu może również oznaczać, że N zaczyna się od najwyższej wartości w zakresie i jest dekrementowany w zakresie do momentu spełnienia warunku X .
Wyrażenia, takie jak X - Y, gdzie X i Y mogą być iteratorami innymi niż iteratory dostępu losowego, są przeznaczone w sensie matematycznym. Funkcja nie musi oceniać operatora - , jeśli musi określić taką wartość. To samo dotyczy również wyrażeń, takich jak X + N i X - N, gdzie N jest typem liczby całkowitej.
Kilka algorytmów korzysta z predykatu, który wykonuje porównanie parowe, takie jak z operator==
, w celu uzyskania bool
wyniku. Funkcja operator==
predykatu lub jej zamiana nie może zmieniać żadnego z jego operandów. Musi zwracać ten sam wynik za każdym razem, gdy jest obliczany, i musi zwracać ten sam bool
wynik, jeśli kopia dowolnego operandu zostanie zastąpiona argumentem operandu.
Kilka algorytmów korzysta z predykatu, który musi nakładać ścisłe słabe kolejność na pary elementów z sekwencji. Dla predykatu pred(X, Y):
Strict oznacza, że pred(X, X) jest fałszywe.
Weak oznacza, że X i Y mają równoważne kolejność, jeśli !pred(X, Y) && !pred(Y, X) (X == nie musi być zdefiniowany).
Kolejność oznacza, że pred(X, Y) && pred(Y, Z) oznacza pred(X, Z).
Niektóre z tych algorytmów niejawnie używają predykatu X<Y. Inne predykaty, które zwykle spełniają ścisłe wymagania dotyczące słabego porządkowania, to X>Y, less
(X, Y) i greater
(X, Y). Należy jednak pamiętać, że predykaty, takie jak X<= Y i X>= Y, nie spełniają tego wymagania.
Sekwencja elementów wyznaczonych przez iteratory w zakresie [First
, ) jest sekwencją uporządkowaną według operatora<
, jeśli dla każdego N w zakresie [0, Last
First
- ) i dla każdego M w zakresie (N, Last
First
- ) predykat !( Last
*(M) < *(First
+ First
+ N)) ma wartość true. (Pamiętaj, że elementy są sortowane w kolejności rosnącej). Funkcja operator<
predykatu lub jej zamiana nie może zmieniać żadnego z jego operandów. Musi zwracać ten sam wynik za każdym razem, gdy jest obliczany, i musi zwracać ten sam bool
wynik, jeśli kopia dowolnego operandu zostanie zastąpiona argumentem operandu. Ponadto musi narzucić ścisłe słabe porządkowanie operandów, które porównuje.
Sekwencja elementów wyznaczonych przez iteratory w zakresie [First
, ) jest stertą uporządkowaną wedługoperator<
, jeśli dla każdego N w zakresie [1, Last
- First
) predykat !( Last
*Pierwszy< *(First
+ N)) ma wartość true. (Pierwszy element jest największy). Jego struktura wewnętrzna jest inaczej znana tylko z funkcji make_heap
szablonu , pop_heap
i push_heap
. Podobnie jak w przypadku uporządkowanej sekwencji, funkcja operator<
predykatu lub jakikolwiek zamiennik dla niego, nie może zmienić żadnego z jego operandów i musi narzucić ścisłe słabe kolejność na operandach, które porównuje. Musi zwracać ten sam wynik za każdym razem, gdy jest obliczany, i musi zwracać ten sam bool
wynik, jeśli kopia dowolnego operandu zostanie zastąpiona argumentem operandu.
Algorytmy standardowej biblioteki języka C++ znajdują się w plikach nagłówków <algorithm>
i .<numeric>
Zobacz też
Dokumentacja standardowej biblioteki C++
Bezpieczeństwo wątku w standardowej bibliotece C++