Czy do wyszukania wartości w danym zakresie należy użyć funkcji search() czy find()? Jakie argumenty ma funkcja list::splice? Kiedy wywoływać mem_fun, a kiedy mem_fun_ref? Zapewne jak wielu innych programistów masz kłopot z zapamiętaniem tych wszystkich szczegółów, nawet jeśli codziennie używasz biblioteki STL.
Książka Raya Lischnera "STL. Leksykon kieszonkowy" będzie dla Ciebie nieocenioną pomocą -- w prosty sposób odpowiada na wszystkie takie pytania.
W tej książce znajdują się opisy interfejsów kontenerów, iteratorów, algorytmów i obiektów funkcyjnych zawartych w bibliotece STL. Można w niej znaleźć szczegóły dotyczące wywołań funkcji, typów zwracanych przez te funkcje, parametrów szablonów i wiele więcej. W połączeniu z książką "C++. Leksykon kieszonkowy", książka ta pozwala na spore oszczędności czasu. Na pewno przyda się w czasie pisania programów.
"STL to skondensowana wiedza i doświadczenie, a ta książka to skondensowana biblioteka STL. Nie, nie pożyczę swojego egzemplarza... kup sobie własny!"
Andrew Duncan, Senior Software Engeneer, Expertcity Inc.
1. IDZ DO
PRZYK£ADOWY ROZDZIA£
SPIS TRE CI STL. Leksykon
kieszonkowy
KATALOG KSI¥¯EK
Autor: Ray Lischner
KATALOG ONLINE T³umaczenie: Wojciech Moch
ISBN: 83-7361-438-9
ZAMÓW DRUKOWANY KATALOG Tytu³ orygina³u: STL Pocket Reference
Format: B5, stron: 132
TWÓJ KOSZYK
DODAJ DO KOSZYKA Czy do wyszukania warto ci w danym zakresie nale¿y u¿yæ funkcji search() czy find()?
Jakie argumenty ma funkcja list::splice? Kiedy wywo³ywaæ mem_fun, a kiedy
mem_fun_ref? Zapewne jak wielu innych programistów masz k³opot z zapamiêtaniem
CENNIK I INFORMACJE tych wszystkich szczegó³ów, nawet je li codziennie u¿ywasz biblioteki STL.
Ksi¹¿ka Raya Lischnera „STL. Leksykon kieszonkowy” bêdzie dla Ciebie nieocenion¹
ZAMÓW INFORMACJE pomoc¹ -- w prosty sposób odpowiada na wszystkie takie pytania.
O NOWO CIACH W tej ksi¹¿ce znajduj¹ siê opisy interfejsów kontenerów, iteratorów, algorytmów
i obiektów funkcyjnych zawartych w bibliotece STL. Mo¿na w niej znale æ szczegó³y
ZAMÓW CENNIK dotycz¹ce wywo³añ funkcji, typów zwracanych przez te funkcje, parametrów szablonów
i wiele wiêcej. W po³¹czeniu z ksi¹¿k¹ „C++. Leksykon kieszonkowy”, ksi¹¿ka
ta pozwala na spore oszczêdno ci czasu. Na pewno przyda siê w czasie pisania
CZYTELNIA programów.
FRAGMENTY KSI¥¯EK ONLINE „STL to skondensowana wiedza i do wiadczenie, a ta ksi¹¿ka to skondensowana
biblioteka STL. Nie, nie po¿yczê swojego egzemplarza… kup sobie w³asny!”
Andrew Duncan, Senior Software Engeneer, Expertcity Inc.
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
2. Spis treści
Wprowadzenie..........................................................................5
Kontenery ..................................................................................8
Kontenery standardowe............................................................................9
Adaptory kontenerów .............................................................................11
Wartości .....................................................................................................11
Typowe składowe ....................................................................................12
Wyjątki.......................................................................................................22
Kolejki ........................................................................................................23
Listy............................................................................................................24
Mapy ..........................................................................................................28
Kolejki priorytetowe ................................................................................29
Kolejki ........................................................................................................31
Zbiory.........................................................................................................32
Stosy ...........................................................................................................34
Ciągi znaków ............................................................................................35
Wektory .....................................................................................................47
Iteratory...................................................................................49
Kategorie iteratorów................................................................................50
Stosowanie iteratorów.............................................................................51
Cechy iteratorów ......................................................................................54
Iteratory do stałej .....................................................................................55
Iteratory wstawiające...............................................................................57
Iteratory strumieni wejścia-wyjścia.........................................................58
Iterator typu raw storage ........................................................................65
Iteratory wsteczne....................................................................................65
Szablony funkcji iteratorów....................................................................70
Algorytmy ...............................................................................70
Operacje niemodyfikujące ......................................................................73
Porównania ...............................................................................................73
Wyszukiwanie ..........................................................................................76
Spis treści 3
3. Wyszukiwanie binarne............................................................................77
Operacje modyfikujące sekwencje.........................................................79
Operacje na niezainicjowanych sekwencjach ......................................85
Sortowanie.................................................................................................86
Łączenie .....................................................................................................88
Operacje na zbiorach ...............................................................................89
Operacje na stercie ...................................................................................91
Permutacje.................................................................................................93
Różne .........................................................................................................93
Numeryczne..............................................................................................94
Funktory ..................................................................................95
Stosowanie funktorów ............................................................................96
Podstawy funktorów ...............................................................................98
Adaptory ...................................................................................................99
Funktory wiążące...................................................................................102
Funktory arytmetyczne i logiczne .......................................................103
Funktory porównujące ..........................................................................105
Różne......................................................................................106
Alokatory.................................................................................................106
Pola bitowe (bitset) ................................................................................109
Pary ..........................................................................................................113
Sprytne wskaźniki..................................................................................114
Boost ......................................................................................117
Tablice ......................................................................................................118
Dynamiczne pola bitowe ......................................................................118
Funktory wiążące...................................................................................119
Składanie funkcji ....................................................................................120
Adaptory .................................................................................................122
Zmiana pliku nagłówkowego Functional ..........................................122
Funkcje lambda ......................................................................................123
Sprytne wskaźniki..................................................................................124
Skorowidz .............................................................................125
4 STL. Leksykon kieszonkowy
4. Różne
W tym rozdziale opisane zostaną szablony klas CNNQECVQT, CWVQARVT
i DKVUGV, których nie można przyporządkować do innych kategorii.
Alokatory
Alokator jest rozwinięciem wyrażeń PGY i FGNGVG. Standardowe
kontenery stosują alokatory do alokowania i zwalniania pa-
mięci a także do konstruowania i niszczenia obiektów zapisa-
nych w kontenerze.
Biblioteka standardowa definiuje szablon klasy CNNQECVQT, który
jest domyślnym alokatorem wszystkich standardowych kontene-
rów. Możliwe jest zastosowanie innego alokatora pod warunkie-
m, że udostępnia on ten sam interfejs co alokator standardowy.
Implementowanie nowego alokatora jest trudniejsze niż można
by z początku sądzić i wykracza poza ramy tej książki. W tym
podrozdziale zostaną opisane tylko sposoby zastosowania stan-
dardowego szablonu klasy CNNQECVQT.
Poniżej opisane zostały typy składowe szablonu CNNQECVQT:
V[RGFGH EQPUV 6
5. EQPUVARQKPVGT
Typ wskaźnika na stały element.
V[RGFGH EQPUV 6
6. EQPUVATGHGTGPEG
Typ stałej l-wartości.
106
%#PFTGL2(56. .GMU[MQP MKGUQPMQY[TFQE UV[
7. V[RGFGH RVTFKHHAV FKHHGTGPEGAV[RG
Typ reprezentujący różnicę między dowolnymi dwoma
wskaźnikami zwróconymi przez alokator po wywołaniu
funkcji CNNQECVG
.
V[RGFGH 6
8. RQKPVGT
Typ wskaźnika.
VGORNCVG ENCUU 7 UVTWEV TGDKPF
Wiąże obiekt alokatora z innym typem wartości. Klasa TG
DKPF posiada jedną deklarację V[RGFGH — QVJGT — będącą
instancją szablonu CNNQECVQT z typem 7, podanym w para-
metrze szablonu. Standardowe kontenery alokujące obiekty
pomocnicze, takie jak węzły łączące, zamiast bezpośred-
niego alokowania wartości wykorzystują szablon TGDKPF.
Osoby, które nie muszą implementować standardowych
kontenerów, najprawdopodobniej nie będą też musiały znać
sposobu działania tego szablonu.
V[RGFGH 6 TGHGTGPEG
Typ l-wartości.
V[RGFGH UKGAV UKGAV[RG
Typ, który może reprezentować rozmiar największego żą-
dania alokacji.
V[RGFGH 6 XCNWGAV[RG
Typ alokowanych wartości.
Poniżej opisane zostały metody szablonu CNNQECVQT:
CNNQECVQT
VJTQY
CNNQECVQT
EQPUV CNNQECVQT VJTQY
VGORNCVGENCUU 7 CNNQECVQT
EQPUV CNNQECVQT7 VJTQY
Tworzy nowy obiekt alokatora kopiując, jeżeli to możliwe,
istniejący alokator.
RQKPVGT CFFTGUU
TGHGTGPEG Z EQPUV
EQPUVARQKPVGT CFFTGUU
EQPUVATGHGTGPEG Z EQPUV
Zwraca adres elementu Z, czyli wartość Z.
Różne 107
9. RQKPVGT CNNQECVG
UKGAV[RG P CNNQECVQTXQKF
EQPUVARQKPVGT JKPV
W celu zaalokowania pamięci wystarczającej do przecho-
wania P elementów typu 6, wywołuje globalny operator PGY.
Argument JKPV musi mieć wartość 0 lub wartość wskaźnika
uzyskanego z innego wywołania funkcji CNNQECVG, którego
nie przekazano jeszcze do funkcji FGCNNQECVG. Zwracany jest
wskaźnik na zaalokowaną właśnie pamięć. Jeżeli nie można
zaalokować wystarczającej ilości pamięci, zgłaszany jest
wyjątek DCFACNNQE.
XQKF EQPUVTWEV
RQKPVGT R EQPUV 6 XCN
Za pomocą globalnego operatora PGY tworzy kopię warto-
ści XCN i umieszcza ją pod adresem R.
XQKF FGCNNQECVG
RQKPVGT R UKGAV[RG P
Zwalnia pamięć wskazywaną przez R poprzez wywołanie
globalnego operatora FGNGVG. Argument P przechowuje licz-
bę elementów typu 6 — ta sama wartość przekazana była
do funkcji CNNQECVG.
XQKF FGUVTQ[
RQKPVGT R
Wywołuje destruktor obiektu umieszczonego pod adresem
R. Oznacza to, że wykonywane jest wywołanie TGKPVGT
RTGVAECUV6
10. R `6
.
UKGAV[RG OCZAUKG
EQPUV VJTQY
Zwraca maksymalny rozmiar, który można przekazać funk-
cji CNNQECVG.
Standard definiuje specjalizowany szablon CNNQECVQTXQKF , który
nie deklaruje funkcji CNNQECVG, EQPUVTWEV itd., ponieważ nie jest
możliwe utworzenie obiektu typu XQKF. Możliwe jest jednak sto-
sowanie jego składowych RQKPVGT, EQPUVARQKPVGT i TGDKPF.
Operatory równości ( i ) są przeciążane w ten sposób, że
wszystkie obiekty typu CNNQECVQT są sobie równe niezależnie od
typu alokowanych wartości.
108 STL. Leksykon kieszonkowy
11. Pola bitowe (bitset)
Obiekty typu DKVUGV są spakowanymi sekwencjami bitów o stałej
wielkości. Nie są to standardowe kontenery, nie udostępniają też
iteratorów.
Szablon klasy DKVUGV (zadeklarowany jest w pliku nagłówkowym
DKVUGV ) pobiera pojedynczy parametr 0 określający liczbę prze-
chowywanych bitów.
Pojedynczy bit może zostać ustawiony na wartość jedynki (funk-
cja UGV) lub zera (funkcja TGUGV). Możliwa jest też zmiana wartości
bitu z jedynki na zero i z zera na jedynkę, umożliwia to funkcja
HNKR. Poniżej zostały opisane metody szablonu DKVUGV:
DKVUGV
Tworzy obiekt typu DKVUGV z wszystkimi bitami wyzerowanymi.
DKVUGV
WPUKIPGF NQPI XCNWG
Tworzy obiekt typu DKVUGV inicjalizując pierwszych O bitów
wartością XCNWG, gdzie O %*#4A$+65
12. UKGQH
WPUKIPGF NQPI.
Jeżeli 0 O, to wszystkie pozostałe bity są ustawiane na war-
tość zero. Jeżeli 0 O, to nadmiarowe bity są ignorowane.
VGORNCVGV[RGPCOG %JCT6 V[RGPCOG 6TCKVU V[RGPCOG #NE
GZRNKEKV DKVUGV
EQPUV DCUKEAUVTKPI%JCT66TCKVU#NE U
V[RGPCOG DCUKEAUVTKPI%JCT66TCKVU#NE UKGAV[RG R
V[RGPCOG DCUKEAUVTKPI%JCT66TCKVU#NE UKGAV[RG P
DCUKEAUVTKPI%JCT66TCKVU#NE PRQU
Tworzy obiekt typu DKVUGV i inicjalizuje go znakami z ciągu
znaków U, rozpoczynając od znaku R i wykorzystując następ-
nych P znaków (albo znaki do końca ciągu, jeżeli jest on krót-
szy od P). Domyślnie wykorzystywany jest cały ciąg znaków.
Znak o wartości powoduje wyzerowanie bitu a znak o wa-
rtości powoduje ustawienie bitu na jedynkę. Znaki o innej
wartości powodują zgłoszenie wyjątku KPXCNKFACTIWOGPV.
Różne 109
13. Znak znajdujący się najbardziej po prawej stronie podcią-
gu (czyli znak U=R
P? albo ostatni znak ciągu U) inicjali-
zuje najmniej znaczący bit pola, czyli bit o indeksie 0. Ko-
lejne bity pola inicjowane są znakami z poprzednich
indeksów ciągu U. Bity niezainicjowane przez ciąg znaków
są zerowane. Wszystkie pola bitowe z poniższych przy-
kładów otrzymują wartość :
DKVUGV C
UVTKPI
DKVUGV D
UVTKPI
DKVUGV E
UVTKPI
DKVUGV F
UVTKPI
Tak długa deklaracja szablonu wynika z zastosowania sza-
blonu klasy DCUKEAUVTKPI. W typowych zastosowaniach wy-
korzystujących tylko klasę UVTKPI, można tą deklarację od-
czytywać następująco:
DKVUGV
EQPUV UVTKPI U UKGAV R
UKGAV PUVTKPIPRQU
DQQN CP[
EQPUV
Zwraca wartość VTWG, jeżeli którykolwiek bit jest ustawiony na
wartość jeden a wartość zera, gdy wszystkie bity są zerami.
UKGAV EQWPV
EQPUV
Zwraca liczbę bitów o wartości jeden.
DKVUGV0 HNKR
Odwraca wartość wszystkich bitów. Zwraca wartość
14. VJKU.
DKVUGV0 HNKR
UKGAV RQU
Odwraca wartość bitu na pozycji RQU. Jeżeli wartość RQU jest
nieprawidłowa, zgłaszany jest wyjątek QWVAQHATCPIG. Zwra-
ca wartość
15. VJKU.
DQQN PQPG
EQPUV
Zwraca wartość VTWG, gdy wszystkie bity zerami, a wartość
HCNUG, jeżeli którykolwiek bit jest ustawiony na wartość jeden.
110 STL. Leksykon kieszonkowy
16. TGHGTGPEG QRGTCVQT=?
UKGAV RQU
Zwraca obiekt DKVUGVTGHGTGPEG będący referencją na bit
na pozycji RQU. Jeżeli wartość RQU jest z poza zakresu, za-
chowanie funkcji jest niezdefiniowane. Klasa DKVUGVTGHG
TGPEG przechowuje referencję na obiekt DKVUGV i pozycję RQU.
Przeciąża ona operator przypisania () w ten sposób, że
przypisania do obiektu typu TGHGTGPEG zmieniają wartość
pola bitowego DKVUGV. Klasa TGHGTGPEG definiuje też metodę
HNKR, odwracającą wartość bitu, którego dotyczy referencja.
DQQN QRGTCVQT=?
UKGAV RQU EQPUV
Zwraca wartość bitu na pozycji RQU. Jeżeli wartość RQU jest
spoza zakresu, zachowanie funkcji jest niezdefiniowane.
DKVUGV0 TGUGV
Zeruje wszystkie bity. Zwraca wartość
17. VJKU.
DKVUGV0 TGUGV
UKGAV RQU
Zeruje bit na pozycji RQU. Jeżeli wartość RQU jest nieprawi-
dłowa zgłaszany jest wyjątek QWVAQHATCPIG. Zwraca war-
tość
18. VJKU.
DKVUGV0 UGV
Ustawia wszystkie bity. Zwraca wartość
19. VJKU.
DKVUGV0 UGV
UKGAV RQU KPV XCN VTWG
Jeżeli wartość XCN jest różna od zera, ustawia bit na pozycji
RQU. Jeżeli wartość RQU jest nieprawidłowa, zgłaszany jest
wyjątek QWVAQHATCPIG. Zwraca wartość
20. VJKU.
UKGAV UKG
EQPUV
Zwraca wartość 0.
DQQN VGUV
UKGAV RQU EQPUV
Zwraca wartość bitu na pozycji RQU. Jeżeli wartość RQU jest
nieprawidłowa, zgłaszany jest wyjątek QWVAQHATCPIG.
Różne 111
21. VGORNCVG ENCUU EJCT6 ENCUU VTCKVU ENCUU #NNQECVQT
DCUKEAUVTKPIEJCT6 VTCKVU #NNQECQVT VQAUVTKPI
EQPUV
Zwraca ciąg znaków reprezentujący zawartość obiektu DKV
UGV. Każdy wyzerowany bit jest zamieniany na znak ,
a bity ustawione na jedynkę zamieniane są na znak . Bit
z pozycji 0 jest zapisywany w ciągu na pierwszej pozycji
od prawej strony (pozycji 0).
W czasie wywoływania funkcji VQAUVTKPI kompilator nie
jest w stanie wykryć parametrów szablonu, dlatego trzeba
je podać jawnie:
UVFDKVUGV DKVU
UVFUVTKPI
UVFUVTKPI UVT DKVUVGORNCVG VQAUVTKPIEJCT
UVFEJCTAVTCKVUEJCT
UVFCNNQECVQTEJCT
WPUKIPGF NQPI VQAWNQPI
EQPUV
Przetwarza zawartość obiektu DKVUGV na wartość całkowitą.
Jeżeli 0 jest zbyt duże, żeby można było ją zapisać jako WP
UKIPGF NQPI, zgłaszany jest wyjątek QXGTHNQYAGTTQT.
Dla obiektów DKVUGV definiowane są również operatory bi-
towe, przesunięcia i równości stosujące zwyczajową sema-
ntykę. Operandy operatorów bitowych muszą być tej sa-
mej wielkości. Operatory przesunięć uzupełniają brakujące
bity zerami.
Przeciążane są też operatory wejścia-wyjścia. Operator wyj-
ścia () zapisuje zawartość obiektu DKVUGV do ciągu znaków
w ten sam sposób jak robi to funkcja VQAUVTKPI. Operator
wejścia ( ) odczytuje z ciągu znaków zawartość obiektu
DKVUGV, tak samo jak robi to konstruktor obiektu.
112 STL. Leksykon kieszonkowy
22. Pary
Szablon klasy RCKT reprezentuje parę związanych ze sobą obiek-
tów. Pary są najczęściej stosowane w szablonach klas OCR i OWNVK
OCR, które przechowują w nich klucze i związane z nimi obiekty.
Szablon RCKT i związane z nim szablony funkcji są zadeklarowane
pliku nagłówkowym WVKNKV[ .
Deklaracji szablonu RCKT prawie nie trzeba objaśniać:
VGORNCVG V[RGPCOG 6 V[RGPCOG 6
UVTWEV RCKT ]
V[RGFGH 6 HKTUVAV[RG
V[RGFGH 6 UGEQPFAV[RG
6 HKTUV
6 UGEQPF
RCKT
RCKT
EQPUV 6 Z EQPUV 6 [
VGORNCVGV[RGPCOG 7 V[RGPCOG 8
RCKT
EQPUV RCKT7 8 R
_
Konstruktory obiektów RCKT6 6 nie są zbyt skomplikowane:
RCKT
Inicjalizuje element HKTUV wartością 6
a element UGEQPF
wartością 6
.
RCKT
EQPUV 6 Z EQPUV 6 [
Inicjalizuje element HKTUV wartością Z a element UGEQPF
wartością [.
VGORNCVGV[RGPCOG 7 V[RGPCOG 8
RCKT
EQPUV RCKT7 8 R
Inicjalizuje element HKTUV wartością RHKTUV a element UGEQPF
wartością RUGEQPF. Jeżeli to konieczne, są wykonywane
odpowiednie konwersje.
Różne 113
23. Niektóre szablony funkcji ułatwiają pracę z parami:
VGORNCVGV[RGPCOG 6 V[RGPCOG 6
RCKT66 OCMGARCKT
6 C 6 D
Tworzy obiekt RCKT6 6 i inicjalizuje go wartościami
C i D. Zastosowanie funkcji OCMGARCKT zamiast konstruktora
szablonu RCKT pozwala kompilatorowi rozpoznać typy 6
i 6 wartości C i D.
VGORNCVGV[RGPCOG 6 V[RGPCOG 6
DQQN QRGTCVQT
EQPUV RCKT66 C EQPUV RCKT66 D
Zwraca wartość VTWG, gdy pary C i D są sobie równe, czyli
gdy CHKTUV DHKTUV i CUGEQPF DUGEQPF.
VGORNCVGV[RGPCOG 6 V[RGPCOG 6
DQQN QRGTCVQT
EQPUV RCKT66 C EQPUV RCKT66 D
Zwraca wartość VTWG, gdy para C jest mniejsza od pary D,
przy założeniu, że element HKTUV jest bardziej znaczący niż
element UGEQPF. To znaczy, że zwracany jest wynik wyraże-
nia CHKTUV DHKTUV ^^
DHKTUV CHKTUV CUGEQPF
DUGEQPF.
Pozostałe operatory porównań definiowane są na podstawie ope-
ratorów i .
Sprytne wskaźniki
Szablon klasy CWVQARVT (zadeklarowanej w pliku nagłówkowym
OGOQT[ ) implementuje sprytne wskaźniki będące właścicielami
wskaźników. Właściwe stosowanie klasy CWVQARVT daje pewność,
że dany wskaźnik posiada tylko jednego właściciela (co pozwala
na uniknięcie podwójnych usunięć wskaźnika), który automa-
tycznie zwalnia pamięć, gdy właściciel wyjdzie poza dopuszczal-
ny zakres (dzięki czemu unika się wycieków pamięci). Przypisa-
nie wartości typu CWVQARVT zmienia właściciela wskaźnika z obiektu
źródłowego na obiekt docelowy operacji przypisania.
114 STL. Leksykon kieszonkowy
24. Uwaga
Szablon CWVQARVT nie ma semantyki wartości, ponieważ
przypisanie lub kopiowanie obiektu typu CWVQARVT powoduje
modyfikacje obiektu źródłowego (zrzeczenie się własności),
dlatego obiekty typu CWVQARVT nie mogą być przechowywa-
ne w kontenerach.
Poniżej znajdują się opisy składowych szablonu CWVQARVT:
V[RGFGH 6 GNGOGPVAV[RG
Synonim typu bazowego.
GZRNKEKV CWVQARVT
6
25. R VJTQY
Inicjalizuje obiekt CWVQARVT, tak żeby był on właścicielem
wskaźnika R.
CWVQARVT
CWVQARVT Z VJTQY
VGORNCVGENCUU 7 CWVQARVT
CWVQARVT7 Z VJTQY
Inicjalizuje obiekt CWVQARVT wskaźnikiem zwróconym przez
ZTGNGCUG
. W drugiej wersji konstruktora typ 7
27. . Należy zauważyć, że
Z nie jest oznaczony jako EQPUV. Nie jest możliwe kopiowa-
nie obiektu typu EQPUV CWVQARVT, ponieważ doprowadziło-
by to naruszenia zasad własności.
CWVQARVT
CWVQARVTATGH6 T VJTQY
Inicjalizuje obiekt CWVQARVT wskaźnikiem uzyskanym z wy-
wołania funkcji TGNGCUG z obiektu T.
`CWVQARVT
VJTQY
Usuwa wskaźnik posiadany przez obiekt np. przez wy-
wołanie FGNGVG IGV
.
6
31. R VJTQY
Usuwa posiadany wskaźnik (jeżeli nie jest on równy R) i za-
pisuje R jako nowo posiadany wskaźnik.
VGORNCVGENCUU 7 QRGTCVQT CWVQARVTATGH7
VJTQY
Zwraca tymczasowy obiekt typu CWVQARVTATGH posiadający
wskaźnik. Wskaźnik musi być konwertowalny na typ 7
32. .
Własność jest przenoszona na nowy obiekt CWVQARVTATGH.
Typ CWVQARVTATGH jest typem definiowanym w implementacji,
ułatwiającym stosowanie obiektów CWVQARVT jako typów zwra-
canych przez funkcję. W większości przypadków, można igno-
rować typ CWVQARVTATGH i deklarować parametry funkcji i warto-
ści przez nie zwracane z wykorzystaniem typu CWVQA RVT,
pozwalając kompilatorowi wykonać odpowiednie konwersje.
VGORNCVGENCUU 7 QRGTCVQT CWVQARVT7
VJTQY
Zwraca nowy obiekt typu CWVQARVT. Posiadany wskaźnik jest
konwertowany na typ 7
33. a nowy obiekt CWVQARVT przejmuje go
na własność.
CWVQARVT QRGTCVQT
CWVQARVT Z VJTQY
VGORNCVGENCUU 7
CWVQARVT QRGTCVQT
CWVQARVT7 Z VJTQY
CWVQARVT QRGTCVQT
CWVQARVTATGH6 T VJTQY
Własność wskaźnika przenoszona jest na obiekt
34. VJKU z obie-
ktu Z albo z obiektu CWVQARVT przechowywanego przez para-
metr T. To znaczy, że wykonywane jest wywołanie TGUGV
Z
TGNGCUG
.
6 QRGTCVQT
37. QRGTCVQT
EQPUV VJTQY
Zwraca wynik wywołania IGV
.
W rozdziale „Boost” opisano inne sprytne wskaźniki, w tym ró-
wnież takie, które mogą wskazywać tablice i być przechowywane
w kontenerach.
116 STL. Leksykon kieszonkowy