Treść książki
Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
podobniejakwprzypadkutablicy,uzyskaćdostępdoelementówwektora.
Tętechnikęstosujesię,abyprzypisaćpierwszemuelementowiwartość21❷.
Ponieważwektorymajądynamicznerozmiary,możnadonichdodawaćele-
mentyzzastosowaniemmetodypush–back3.Pozorniemagicznewywołanie
std::sortprezentujepotęgęalgorytmówdostępnychwbibliotecestdlib4.
Metodyx.begin()ix.end()zwracająiteratory,któresąnastępnieużywane
przezalgorytmstd::sortdoprzeprowadzenianatychmiastowegosortowania.
Użycieiteratorówseparujealgorytmsortodwektora.
Dziękiiteratorommożesztakżeużywaćinnychkontenerówzbiblioteki
stdlib.Naprzykładzamiastwektora,mógłbyśwykorzystaćlistę(mówiącdo-
kładniej,listędwukierunkową).Ponieważlistarównieżudostępniaiteratory
zapomocąmetod.begin()i.end(),możeszwywołaćalgorytmsortwtakisam
sposób,jakwprzypadkuwektora.
Pozatymnalistingu19zostałaużytabibliotekastrumieniiostreams.Jest
tomechanizmudostępnionyprzezbibliotekęstdlib,którysłużydowyko-
nywaniabuforowanychoperacjiwejściaiwyjścia.Abywysłaćdostrumienia
std::cout(któryhermetyzujestandardowewyjściestdout)wartośćx.size()
(liczbęelementówzawartychwwektorzex),niektóreliterałyłańcuchoweoraz
liczbęelementówciąguFibonacciego,używaszoperatorawstawiania(<<)5❻.
Obiektstd::endljestmanipulatoremwejściaiwyjścia,któryzapisujeznak\n
iopróżniabufor,zapewniając,żeprzedwykonaniemnastępnejinstrukcjicały
strumieńzostaniewysłanynastandardowewyjściestdout.
Aterazwyobraźsobie,iluwyzwaniommusiałbyśstawićczoła,abystworzyć
równoważnyprogramwjęzykuC.Terazjużwiesz,dlaczegobibliotekastdlib
jesttakcennymnarzędziem.
Wyrażenialambda
Wyrażenialambda,zwanerównieżwniektórychkręgachfunkcjaminienazwa-
nymilubanonimowymi,tokolejna,potężnawłaściwośćjęzyka,którapoprawia
poziomuporządkowaniakodu.Czaseminnejfunkcjinależyprzekazaćwskaź-
nikdofunkcjilubwykonaćtransformacjękażdegoelementuserii.Wtakich
przypadkachdośćniewygodnebyłobyzdefiniowaniefunkcjiojednorazowym
zastosowaniu.Tuwłaśniepojawiająsięwyrażenialambda.Wyrażenielambda
tounikatowafunkcjaużytkownika,zdefiniowanawewnątrzinstrukcjiizawierająca
parametrywywołania.Rozważnastępującywiersz.Funkcjataoblicza,ileliczb
parzystychznajdujesięwkontenerzex:
auton–evens:std::count–if(x.begin(),x.end(),
[](autonumber){returnnumber%2::0;});
Tenfragmentkoduużywaalgorytmucount–ifzbibliotekistdlibdozlicza-
nialiczbparzystychwkontenerzex.Pierwszedwaargumentyfunkcjistd::co-
unt–ifsątakiesame,jakwprzypadkustd::sort.Sątoiteratory,któreokreślają
zakresdziałaniaalgorytmu.Trzecimargumentemjestwyrażenielambda.
Użytanotacjawyglądaprawdopodobnieniecodziwnie,alezasadydefiniowa-
niawyrażenialambdasąproste:
[obszarprzechwytywania](argumenty){treść}
WstępdlaprogramistówC
li