Adaptory kontenerów¶
- Adaptory kontenerów
- szablony klas używające kontenerów do przechowywania elementów oraz udostępniające ograniczony interfejs.
Informacja
Adaptory nie posiadają iteratorów. Nie można ich stosować w standardowych algorytmach.
stack<T>
- stos
- pozwala jedynie na dodawanie i usuwanie elementów na jego końcu (LIFO)
<stack>
queue<T>
- kolejka FIFO
<queue>
priority_queue<T>
- kolejka priorytetowa układa elementy w takiej kolejności, że pierwszy jest zawsze element o największej wartości
- możliwe jest dodanie elementu do kolejki a także sprawdzenie i usunięcie pierwszego elementu
<queue>
std::stack¶
Stos jest kontenerem sekwencyjnym pozwalającym na dodawanie i usuwanie elementów tylko z jednego końca (LIFO).
Szablon klasy std::stack jest adaptorem dowolnego kontenera sekwencyjnego (deque, vector, list)
udostępniającego składowe back, push_back i pop_back. Domyślnie stosowany jest kontener std::deque.
Interfejs stosu:
-
bool
stack::empty() const¶ zwraca true jeśli stos jest pusty
-
void
stack::pop()¶ usuwa element ze szczytu stosu
-
void
stack::push(const value_type &x)¶ wstawia element
xna szczyt stosu
-
size_type
stack::size() const¶ zwraca liczbę elementów na stosie
-
value_type &
stack::top()¶ zwraca element ze szczytu stosu
std::queue¶
Kolejka jest kontenerem sekwencyjnym, pozwalającym na dodawanie elementów na jednym końcu i usuwanie ich na drugim (FIFO)
Szablon klasy std::queue<T, Container> jest adaptorem dowolnego kontenera sekwencyjnego udostępniającego metody:
front, back, push_back i pop_front. Domyślnie stosowany jest kontener std::deque.
Interfejs kolejki:
-
bool
queue::empty() const¶ zwraca true jeśli kolejka jest pusta
-
void
queue::pop()¶ usuwa pierwszy element z kolejki
-
value_type &
queue::front()¶ zwraca pierwszy element kolejki
-
value_type &
queue::back()¶ zwraca ostatni, czyli ostatnio dodany element kolejki
-
void
queue::push(const value_type &x)¶ na koniec kolejki wstawia element x
-
size_type
queue::size() const¶ zwraca liczbę elementów znajdujących się w kolejce
std::bitset¶
std::bitset- efektywny zbiór bitowy o stałej wielkości.
Różnice w stosunku do vector<bool>
- nie zawiera iteratorów
- rozmiar musi być znany w trakcie kompilacji
bitset<16> small_set(string("1011011011")); // konstruktor - 16 bitów
small_set.flip(); // odwrócenie wszystkich bitów
small_set.flip(8); // odwrócenie 8-go bitu
cout << small_set << endl; // wypisanie na ekranie
if (bset_one.test(4))
cout << "bit na pozycji 4 jest ustawiony" << endl;
else
cout << "bit na pozycji 4 nie jest ustawiony" << endl;
std::bitset - metody
-
bool
any() const¶ zwraca
true, jeżeli jakikolwiek bit jest ustawiony na 1
-
size_t
count() const¶ zwraca ilość bitów ustawionych na 1
-
bitset<N> &
flip()¶ odwraca wartość wszystkich bitów
-
bitset<N> &
flip(size_t n)¶ odwraca wartość n-tego bitu
-
bool
none() const¶ zwraca true, gdy wszystkie bity są zerami
-
bitset<N> &
reset()¶ zeruje wszystkie bity
-
bool
test(size_t n) const¶ testuje wartość n-tego bitu
-
string
to_string() const¶ zwraca ciąg znaków reprezentujących bity np. „10000101”
-
long
to_ulong() const¶ przetwarza zawartość obiektu bitset na wartość całkowitą
std:bitset - operacje bitowe¶
Na obiektach bitset<N> możliwe jest wykonywanie operacji bitowych.
Zdefiniowane są odpowiednie operatory: &, |, >>, <<, ~, ^
// operacje bitowe
std::bitset<8> one;
std::bitset<8> two;
one[2] = 1;
two[5] = 1;
bitset<8> three = ~( one>>1 | two );
std::cout << three << " : " << three.to_ulong() << '\n'; // 11011101 : 221