Et unum hominem, et plures in infinitum, quod quis velit, heredes facere licet - wolno uczynić spadkobiercą i jednego człowieka, i wielu, bez ograniczeń, ilu kto chce.

[ Pobierz całość w formacie PDF ]

element, nie jest zdefiniowane, który z nich zostanie usunięty.
" Funkcja nie zwraca wartości. W celu przetworzenia kolejnego elementu musisz
wcześniej wywolać funkcję skladową top().
" Przed wywolaniem funkcji skladowej należy upewnić się, czy stos zawiera jakie-
kolwiek elementy (size()>0). W innym przypadku jej dzialanie jest nieokreślone.
10.4. K>ntener bitset
Kontenery typu bitset sÄ… tablicami o ustalonym rozmiarze, zawierajÄ…cymi bity lub
wartości logiczne. Są one przydatne do zarządzania zestawami znaczników, w przypadku
których odpowiednie zmienne mogą reprezentować dowolną kombinację znaczników.
Programy utworzone w języku C oraz starszych standardach języka C++ wykorzystują
zazwyczaj w charakterze tablic bitów zmienne typu long, manipulując nimi przy użyciu
operatorów bitowych w rodzaju &, | oraz ~. Klasa bitset posiada nad takim podejściem
422 10. KONTENERY SPECJALNE
tę przewagę, że może przechowywać dowolną liczbę bitów, jak również zawiera dodat-
kowe operatory, slużące do zmiany stanu bitów. Na przyklad możliwe jest przyporząd-
kowywanie pojedynczych bitów i odczytywanie oraz zapisywanie ich calych zestawów
poprzez użycie sekwencji zer i jedynek.
Zwróć uwagę na fakt, iż niemożliwa jest zmiana liczby bitów w danym kontenerze
bitset. ™ch liczba okreÅ›lona jest jako parametr wzorca. JeÅ›li zachodzi potrzeba wyko-
rzystania zmiennej liczby bitów lub wartości logicznych, możliwe jest wykorzystanie
zmiennej typu vector (opisanej w podrozdziale 6.2.6., na stronie 161).
Klasa bitset zdefiniowana jest w pliku naglówkowym :
#include
W pliku naglówkowym klasa bitset zdefiniowana jest w postaci klasy wzorca,
posiadającego parametr, określający liczbę bitów:
namespace std {
template
class bitset;
}
W tym przypadku parametr nie jest określonym typem, lecz wartością calkowitą bez znaku
(ta cecha języka zostala przedstawiona na stronie 26).
Wzorce posiadające różne argumenty stanowią różne typy danych. Możliwe jest po-
równywanie oraz lączenie kontenerów typu bitset zawierających tę samą liczbę bitów.
10.4.1. Przykłady użycia k>ntenerów bitset
Wykorzystanie kontenerów bitset
do przechowywania zestawu znaczników
Pierwszy przyklad zastosowania klas bitset przedstawia sposób ich wykorzystania do
zarządzania zestawem znaczników. Każdy znacznik posiada wartość określoną za pomocą
typu wyliczeniowego. Wartość ta zostala wykorzystana do określenia pozycji bitu. W tym
przykladzie bity reprezentują kolory. Dlatego też również każda wartość typu wylicze-
niowego Color określa jeden kolor. Dzięki zastosowaniu klasy bitset możliwe jest
wykorzystanie zmiennych, które mogą zawierać dowolną kombinację kolorów:
//cont/bitset1.cpp
#include
#include
using namespace std;
int main()
{
/* typ wyliczeniowy uzywany w klasie bitset
* - kazdy bit reprezentuje kolor
*/
enum Color { red, yellow, green, blue, white, black, ...,
numColors };
10.4. KONTENER BITSET 423
// tworzy kontener bitset dla wszystkich bitow (kolorow)
bitset usedColors;
// ustawia bity dla dwoch kolorow
usedColors.set(red);
usedColors.set(blue);
// wypisuje informacje o niektorych danych przechowywanych
// w klasie bitset
cout
cout
cout
// jesli zostal wykorzystany jakikolwiek kolor
if (usedColors.any()) {
// przejrzyj wszystkie kolory
for (int c = 0; c
// jesli wykorzystany zostal rzeczywisty kolor
if (usedColors[(Color)c]) {
//...
}
}
}
}
Wykorzystanie kontenerów bitset
do operacji wejścia-wyjścia korzystających z reprezentacji bitowych
Jedną z przydatnych wlaściwości klasy bitset jest możliwość przekonwertowania
wartości calkowitych do postaci sekwencji bitów i na odwrót. Konieczne jest w tym celu
wykorzystanie tymczasowego obiektu klasy bitset:
// cont/bitset2.cpp
#include
#include
#include
#include
using namespace std;
int main()
{
/* wyswietla reprzentacje bitowa kilku liczb
*/
cout
cout
cout
/* przeksztalc reprezentacje binarna do postaci liczby calkowitej
*/
424 10. KONTENERY SPECJALNE
cout
}
W zależności od liczby bitów przeznaczonych do reprezentowania liczby typu short
oraz long, program móglby dać następujące wyniki:
267 w postaci binarnej liczby typu short: 0000000100001011
267 w postaci binarnej liczby typu long: 00000000000000000000000100001011
10,000,000 w postaci binarnej liczby 24 bitowej: 100110001001011010000000
"1000101011" w postaci liczbowej: 555
W tym przykladzie zastosowanie klasy:
bitset(267)
powoduje przeksztalcenie liczby 267 do postaci kontenera bitset, zawierajÄ…cego bity
reprezentujące wartości typu unsigned short (omówienie największych możliwych
do reprezentacji wartości liczbowych zostalo umieszczone w podrozdziale 4.3., na stro-
nie 72). Odpowiedni operator zdefiniowany w klasie bitset powoduje wyświetlenie [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • jutuu.keep.pl
  • Menu

    Cytat


    Fallite fallentes - okłamujcie kłamiących. Owidiusz
    Diligentia comparat divitias - pilność zestawia bogactwa. Cyceron
    Daj mi właściwe słowo i odpowiedni akcent, a poruszę świat. Joseph Conrad
    I brak precedensu jest precedensem. Stanisław Jerzy Lec (pierw. de Tusch - Letz, 1909-1966)
    Ex ante - z przed; zanim; oparte na wcześniejszych założeniach.