![]() ![]() ![]() |
|
Jméno | Popis |
Algoritmy používané k plnění sekvence | |
fill | Plnění sekvence počátečními hodnotami. |
fill_n | Plnění n pozic počáteční hodnotou. |
copy | Kopírování sekvence z jiné sekvence. |
copy_backward | Kopírování sekvence z jiné sekvence. |
generate | Inicializuje sekvenci pomocí generátoru. |
generate_n | Inicializuje n pozic pomocí generátoru. |
swap_ranges | Zaměňuje hodnoty ve dvou paralelních sekvencích. |
Vyhledávací algoritmy | |
find | Hledání prvku odpovídajícímu parametru. |
find_if | Hledání prvku splňujícího podmínku. |
adjacent_find | Hledání prvku shodujícího se s následujícím prvkem. |
find_first_of | Hledání prvního výskytu jedné sekvence v jiné sekvenci. |
find_end | Hledání posledního výskytu podsekvence v sekvenci. |
search | Hledání podsekvence v sekvenci. |
max_element | Hledání maximální hodnoty v sekvenci. |
min_element | Hledání minimální hodnoty v sekvenci. |
mismatch | Nalezení první neshody v paralelních sekvencích. |
Transformace na místě | |
reverse | Obrací prvky v sekvenci. |
replace | Nahrazuje specifikované hodnoty novou hodnotou. |
replace_if | Nahrazuje prvky vyhovující tvrzení. |
rotate | Rotuje prvky v sekvenci okolo bodu. |
partition | Rozděluje prvky do dvou skupin. |
stable_partition | Rozdělování chránící původní pořadí. |
next_permutation | Generuje permutaci v sekvenci. |
prev_permutation | Generuje permutaci v reverzní sekvenci. |
inplace_merge | Spojuje dvě sousední sekvence v jednu. |
random_shuffle | Náhodně přeskupí prvky v sekvenci. |
Odstraňovací algoritmy | |
remove | Odstraňuje prvky splňující podmínku. |
unique | Odstraňuje všechny neprvní duplicitní hodnoty v sekvenci. |
Algoritmy generující skalár | |
count | Počet prvků s odpovídající hodnotou. |
count_if | Počet prvků vyhovujících tvrzení. |
accumulate | Redukce sekvence na skalární hodnotu. |
inner_product | Vnitřní produkt dvou paralelních sekvencí. |
equal | Test dvou sekvencí na rovnost. |
lexicographical_compare | Porovnávání dvou sekvencí. |
Algoritmy generující sekvence | |
transform | Transformuje každý prvek. |
partial_sum | Generuje sekvenci částečných součtů. |
adjacent_difference | Generuje sekvenci sousedních rozdílů. |
Různé operace | |
for_each | Aplikuje funkci na každý prvek kolekce. |
Pro použití většiny obecných algoritmů musíme vložit příslušný hlavičkový
soubor. Hlavní funkce jsou definovány v hlavičkovém souboru algorithm.
Funkce accumulate, inner_product, partial_sum a adjacent_difference
jsou definovány v hlavičkovém souboru numeric.
# include <algorithm>
# include <numeric>
Jméno | Popis |
Řadící algoritmy | |
sort | Řazení sekvence. |
stable_sort | Řazení sekvence se zachováním pořadí ekvivalentních prvků. |
partial_sort | Řazení pouze části sekvence. |
partial_sort_copy | Částečné řazení s kopírováním. |
Hledání n-tého největšího prvku | |
nth_element | Lokalizace n-tého největšího prvku. |
Binární hledání | |
binary_search | Vyhledávání, návrat logické hodnoty. |
lower_bound | Vyhledávání, návrat první pozice. |
upper_bound | Vyhledávání, návrat poslední pozice. |
equal_range | Vyhledávání, návrat obou pozic. |
Slučování řazených sekvencí | |
merge | Sloučení dvou seřazených sekvencí. |
Množinové operace | |
set_union | Sjednocení dvou množin |
set_intersection | Průnik dvou množin. |
set_difference | Rozdíl dvou množin. |
set_symmetric_difference | Symetrický rozdíl dvou množin. |
includes | Zjištění, zda množina je podmnožinou jiné množiny. |
Operace s hromadou | |
make_heap | Změna sekvence na hromadu. |
push_heap | Přidání nové hodnoty do hromady |
pop_heap | Odstranění největší hodnoty z hromady |
sort_heap | Změna hromady na řazenou kolekci |
Řazené kolekce mohou být vytvářeny pomocí standardní knihovny různými způsoby. Např.
}
template <class U>
struct rebind { typedef allocator<U>
other; };
Každý typ ukazatele v tomto rozhraní musí mít konverzi na void*.
Musí být možno použít výsledek void* jako hodnotu this v
konstruktoru a destruktoru a v převodech na B<void>::pointer
(pro příslušné B) pro použití v B::deallocate().
Metoda rebind umožňuje kontejneru vytvářet alokátor pro některé
typy poskytnuté jako parametr šablony. Např. kontejner seznamu získává
implicitně allocator<T>, ale seznam také potřebuje alokovat list_nodes.
Kontejner může vytvořit alokátor pro list_nodes mimo alokátor pro
T
takto:
Allocator::rebind<list_node>::other list_node_allocator;
Následuje popis metod, které alokátor standardní knihovny musí poskytovat:
my_allocator();
template <class U>
my_allocator(const
my_allocator<U>&);
template <class U>
operator=(const
my_allocator<U>&);
~my_allocator();
Konstruktory a destruktor.
pointer address(reference
r) const;
Vrací adresu r jako typ pointer. Tato
a následující funkce jsou použity pro převod odkazů na ukazatele.
const_pointer address(const_reference
r) const;
Vrací adresu r jako typ const_pointer.
pointer allocate(size_type
n);
Alokuje místo pro n hodnot T.
template <class T, class U>
types<T>::pointer allocate(size_type
n,
typename my_allocator<void>::const_pointer
hint = 0);
Alokuje místo pro hint hodnot T.
void deallocate(pointer);
Dealokace místa získaného voláním allocate.
size_type max_size();
Vrací největší možné místo dostupné pro volání allocate.
void construct(pointer
p, const T& val);
Vytváří objekt typu T na místě p.
Efekt je: new((void*)p) T(u);
void destroy(pointer
p);
Volá destruktor na hodnotu určenou p. Efekt
je: ((T*)p)->~T()
Následuje popis funkcí (ne metod), které alokátor standardní knihovny
musí poskytnout:
template <class T>
my_allocator::pointer
operator new(my_allocator::size_type,
my_allocator&);
Alokuje místo pro jeden objekt typu T pomocí
my_allocator::allocate.
Efekt je: new((void*)x.template allocate<T>(1)) T;
template <class T, class U>
bool operator==(const
my_allocator<T>& a, const my_allocator<U>& b);
Vrací true, pokud alokátory b a a
mohou být úspěšně zaměněny (tj. b může být použit k dealokaci a
a naopak).
template <class T, class U>
bool operator!=(const
my_allocator<T>& a, const my_allocator<U>& b);
Vrací !(a == b).
Rogue Wave poskytuje alternativní rozhraní alokátoru pro ty překladače,
které nepodporují šablony tříd a šablony metod. Tím se ale zabývat nebudeme.
![]() ![]() ![]() |
|