You are on page 1of 471

C/C++

Ktphaneler

Selami KOLU

1.BLM

Standart C++ ktphanesi


Standart C++ ktphanesi standart C ktphanesinin tamamn ierdii gibi, kk ekleme ve deiikliklerle tip gvenliini destekle en kendine !"g ktphane i de kapsar# $% "den Standart C++ ktphanesi standart C ktphanesinden daha gldr# Kitabm"da Standart C++ ktphanesini a rntlar ile in&ele e&ei"# 'slnda Standart C++ iin en i i ka nak bi""at standardn kendisidir# (imdi gelelim kitabm"da ele ala&am" k)n%lara* birin&i b!lmde

Standart C++ string sn+n ele ala&a"# string sn+, metin srelerini gelitirirken k%llanlr# Kelime ilemlerinde string,e )%n )larak rastlanr# C k)dlar ile gerekletirilen metin ilemleri, C++ da, string sn+nn e ilevleri tara+ndan da rahatlkla aplabilir# string sn+nn e ilevleri* append( ), assign( ), insert( ), remove( ), resize( ), rep a!e( ), !op"(), #ind( ), r#ind( ), #ind$#irst$o#( ), #ind$ ast$o#( ), #ind$#irst$not$o#( ), #ind$ ast$not$o#( ), s%&str( ), !ompare( ), at( ), !apa!it"( ), empt"( ), erase( ), ength( ), ma'$size( ), size( ), ve s(ap( ) dir# $%nlardan baka atama-./, t)plama -+./ ve k!eli a ra ileleri-01/ de bindirime %ratlarak ilemler gereklenebilir# ' r&a %l%slararas karakterleri desteklemek iin 2geni2 bir (string sn+ tasarlanmtr# 3em string hem de (string -4string5 biiminde bildirilirler, C deki 4string.h5 ile kartrma n, b% C++ da 4!string5 )larak k%llanlr/, &asi!$string )rtak kalp sn+ndan )l%t%r%lm%t%r# 3emen bir k)n% % belirtelim* string sn+ iostream)lerle etle trnak gibi tmleiktir ve b% "den strstream k%llanlma"# $ir s)nraki b!lmde iostream ktphanesi er almaktadr# 6an ktphanesi# $%radaki !eler sa esinde C++ pr)gramlar hatalar alglar ve rap)rlar# 4e'!eption5 bal, standart istisna sn+larn bildirir ve, 4!assert* ise C dilindeki assert.h ile a n ii g!rr# 7enel arara d!nk ktphane# $%radaki !eler Standart C++ ktphanesinin dier ksmlardr, ama isterseni" pr)gramlarn"da k%llanabilirsini"# +,, -,, *,, * ilelerinin kalp srmleri b%l%n%r -ksaltlm tanmlar engellemek iin/, t%p e apan kalp ilevini b%l%nd%ran pair kalp sn+, Standart Kalp 8levlerini -S6L/ desteklemek iin ilev nesneleri kmesi, Standart Kalp 8levleri ile k%llanmak iin, saklama eri erleim ilevleri# $% sa ede bellee erleim mekani"malarn k)la lkla deitirebilirsini"# 9!reletirme ktphanesi# $% ktphaneleri k%llanarak pr)gramlarn" +arkl lke k)%llarna -al+abe, para,sa , "aman v#d#/ % arla abilirsini"# Kap ktphanesi# Standart Kalp Ktphanesinin ierdii gibi, 4&its5 ve 4&itstring5 teki &its ve &itstring sn+larn da kapsar 9inele i&i ktphane# Standart Kalp Ktphane aralar ile beraber ak ve ak tamp)nlar er alr# 'lg)ritmalar ktphanesi# $%nlar SKK -standart kalp ktphanesi/ kaplarnda inele i&ileri k%llanarak ilem gerekletiren kalp ilevleridir# Standart C++ ktphanesi hede+ k)dlarn -.o %"antl/ pr)gramm"da k%llanlmasna ardm etmektedir# SKK ise d)r%dan ka nak k)dlar k%llandrmaktadr# $%ndan d)la kalplar "erine a r bir b!lm ap

k)n% % a rntlar ile irdele e&ei"# :ira ka nak k)dlar -deitirerekte )lsa/ d)r%dan k%llanabilmek, a n tasarm d"enekleri -design patterns/ gibi pr)gram&lkta verimlilii st d"e e karr# $%nlardan baka kalplar ile st pr)gramlama da aplabilmektedir# ;st pr)gramlama C++ da -C dilinde )k/, derle i&inin )r%mla & gibi k%llanld bir % g%lamadr# $ira" ")r bir k)n% gibi g!rnse de, salad )lanaklar inanla&ak gibi deildir# ;st pr)gram* pr)gram pr)gramla an pr)gram )l%p k)d ilemler, % g%lamada C++ eni bir dil gibi davranr# 'slnda b% k)n% bir kitap kapla a&ak kadar giri+t bir mev"%d%r# $%radan da anla a&an" gibi C++ dili ile kalpl -SKK )l% ile/, nesnel !nelim ve apsal -C dili )l% ile/ paradigmalar % g%la abildiimi" gibi, derle i&i sa esinde st pr)gramlama da aplabilmektedir# $% da C++ dilinin, k%llanma bildikten s)nra rakipsi" )ld%%n% g!stermektedir# 'ma hibir "aman %n%t%lmamas gereken* k vermek iin anmal# 6abii si"#

String)ler
string C dilinde "erinde en +a"la vakit har&anan ve anl anlamalara )l aan k)n%lardan biridir# C string ktphane ilevleri, nl kelime ilem

pr)gramlarnn va"geilme"idirler# C string ilevlerini C++ da k%llanmak iin .in! %de 4!string* a"lr# C++ ktphanesinin string sn+n C++ da k%llanmak iin ise .in! %de -string* a"lr# C++ da k%llanlan string sn+nn )k sa daki ap& ilevi her trl kelime ilem s)r%n%n% !"ebilir# 7erek C dili string ilevleri gerekse C++ dilinin string sn+ ap& ilevlerini a rntlar ile in&ele e&ei"# <n&e string nedir )n% akla alm* string C dilinde s)n !esi s+r -s+r s)nlandr& )larak adlandrlr/ )lan karakter di"isidir# Karakter di"ileri har+ ve rakamlardan )l%%r# C stringleri ile C++ stringleri arasnda iki +ark vardr* birin&isi, karakter di"isi )lan C++ string nesneleri, !netmek ve ilemlemek iin gereken ilevlere sahip string sn+ tara+ndan )l%t%r%l%rlar# $ir string, verilerin saklama alan ve b) %t% hakknda da bilgiler tar# <"ellikle, C++ string nesnesi bellekteki balang erini, ieriini, karakter %"%nl%%n%, ve arttrlabile&ek %"%nl%% bilir# $% da ikin&i +ark )rta a karr* C++ string nesneleri C string karakter di"ileri gibi s+r !e ile s)nlanma"# 7enellikle aklamalarda* C !har di"i, C++ string nesne k%llanlr# C++ string nesneleri, C !har di"ilerinden ka naklanan hatalar en a"a indirir# C stringlerinde rastlanan en berbat hatalar* di"i "erine eniden a"ma, di"i e d)r% deer atanmam ve a ilk deer atamas -balatmas/ aplmam g!stergele erime e alma, bir di"i bellekten silinirken g!stergein b%ra a ) srada eniden a"m apmas -sallantdaki g!sterge/# $! le C hatalar, sistemi !kertirler# C++ dilinde string sn+nn bellek k%llanm d"eni tam )larak bilineme"# $% daha "i ade derle i&i reti&isinin aklamna baldr# 9ani bir string nesne verilerinin nerede hangi k)%llarda t%t%ld%% h%s%s%nda, !n&eden tam bilgi sahibi )l%nama"# C dilinde string ilevlerini k%llanmak iin .in! %de -string.h*, karakter ilevlerini k%llanmak iin .in! %de -!t"pe.h* balkta a"lr# C++ dilinde, C dilinin b% ilevlerini k%llanmak iin .in! %de -!string* ve .in! %de -!!t"pe* balklar a"lr# 'nlala&a "ere b%nlar C dilinden gelen ilevlerdir# Si" C++ pr)gram&s )larak b%nlar da k%llanabilirsini"# 'ma bi"im !nerimi" C++ dilinin kendi standart ktphanesinde b%l%nan string sn+ ilevlerinin k%llanlmasdr# C++ string sn+ ilevlerini k%llanmak iin balkta .in! %de -string* a"mak eterlidir# -C++ string sn+ ilevleri, C dilinde k%llanlama" hatrlatalm/# (imdi C++ da k%llanlabile&ek C string ve karakter ilevlerini verelim* int isa n%m(int !h) / !!t"pe

int isa pha(int !h) / !!t"pe int is& ank(int !h) / !!t"pe int is!ntr (int !h) / !!t"pe int isdigit(int !h) / !!t"pe int isgraph(int !h) / !!t"pe int is o(er(int !h) / !!t"pe int isprint(int !h) / !!t"pe int isp%n!t(int !h) / !!t"pe int isspa!e(int !h) / !!t"pe int is%pper(int !h) / !!t"pe int is'digit(int !h) / !!t"pe void0 mem!hr(!onst void0 &%##er, int !h, size$t !o%nt) / !string int mem!mp(!onst void0 &%#1, !onst void0 &%#1, size$t !o%nt) / !string void0 mem!p"(void0 to, !onst void0 #rom, size$t !o%nt) / !string void0 memmove(void0 to, !onst void0 #rom, size$t !o%nt) / !string void0 memset(void0 &%#, int !h, size$t !o%nt) / !string !har0 str!at(!har0 str1, !onst !har0 str1) / !string !har0 str!hr(!onst !har0 str, int !h) / !string int str!mp(!onst !har0 str1, !onst !har0 str1) / !string int str!o (!onst !har0 str1, !onst !har0 str1) / !string !har0 str!p"(!har0 str1, !onst !har0 str1) / !string size$t str!spn(!onst !har0 str1, !onst !har0 str1) / !string !har0 strerror(int errn%m) / !string size$t str en(!onst !har0 str) / !string !har0 strn!at(!har0 str1, !onst !har0 str1, size$t !o%nt) / !string int strn!mp(!onst !har0 str1, !onst !har0 str1, size$t !o%nt) / !string !har0 strn!p"(!har0 str1, !onst !har0 str1, size$t !o%nt) / !string !har0 strp&rk(!onst !har0 str1, !onst !har0 str1) / !string !har0 strr!hr(!onst !har0 str, int !h) / !string size$t strspn(!onst !har0 str1, !onst !har0 str1) / !string !har0 strstr(!onst !har0 str1, !onst !har0 str1) / !string !har0 strtok(!har0 str1, !onst !har0 str1) / !string size$t str'#rm(!har0 str1, !onst !har0 str1, size$t !o%nt) / !string int to o(er(int !h) / !!t"pe int to%pper(int !h) / !!t"pe $%rada !string ve !!t"pe aklamalarn, ilgili ilevi C++ dilinde k%llanrken, a"la&ak balk biimini hatrlatmak iin verdik# <rnek*

.in! %de -!string* .in! %de -!!t"pe* 8levlerin k%llanm a rntlarn, C standartlarnn b%l%nd%% herhangi bir kitapta b%labilirsini"# 'slnda %kardaki a"m biimlerine bakarak bir)k !"ellii si" kendini" de ke+edebilirsini"# $ira" ga ret# $%rada bir k)n% % eri gelmiken belirtelim !stringte er alan mem!p", memset gibi bellek erleim ilevleri ba"en C++ daki ne( ile&i erine ter&ih edilebilmektedir# O nedenle b% tr bellek erleim ilevlerinin a rntlarn !renmeni" si"in ararn"adr# $%rada C ile ilgili daha +a"la a rnt vermememi"in nedeni ise asl hede+imi"in C++ dili )lmasdr#

C++ standart ktphane string) eri


(imdi b% b!lmde &asi!$string- * temel kalp ktphanesi ve )n%n !"ellemi standard string ile (string,i in&ele e&ei"# $ilindii gibi bir sn+ k%llanabilmek iin, ) sn+n p%& i! ara "n i i bilmek gerekir# String sn+nn )ld%ka geni !ntemler kmesi b%l%nmaktadr# $%nlarn iinde )k sa da ap& ilev, string atamalar iin bindirilmi ileler, string birletiri&ileri, karlatr&lar ve her !e e a r a r eriebilme !ntemleri ve daha bir)klar sa labilir# Ksa&a string sn+ bir sr i apar#

string nesnesi o %2t%rmak


<n&e string sn+ ap& ilevlerini in&ele elim# =aha s)nra, sn+n nesnesi )l%t%r%l%rken en !nemli e i dikkate alalm* sn+la ilgili seenekler# String sn+na ait > adet ap& ilev aada a rntlar ile verilmitir# String s3n3#3n3n "ap3!3 i2 ev eri 9ap& ilev 14string(!onst !har0 s) 'klamalar string nesnesini S$SS s g!stergei ile balatr

14string(size$t"pe n, !har !)

n tane !esi )lan string nesnesi )l%t%r%r, herbiri & karakteri ile balar# 54string(!onst string6 str, string string nesnesini str nesnesi ile ba? size$t"pe pos,7, size$t"pe n,npos) latr, str deki p)s dan bala arak str nin s)n%na kadar gider ve a n tane karakter k%llanr# -hangisi !n&e ise/ 84string( ) @ b klndeki varsa lan string nesnesini )l%t%r%r 94string(!onst !har0 s, size$t"pe n) string nesnesini s nin g!sterdii S$SS ile balatr, b% S$SS b) %t% alsa bile srer :4temp ate-! ass ;ter* string nesnesini 0begin, end/ aras string(;ter &egin, ;ter end) deerlerle balatr# begin ve end g!sterge gibi davranr, er belirler# =eerlere begin dahil ama end deil# A)t* SBSS. s+r ba t s)nlanmal string, ani C?string demektir# $%nlardan baka +. bindirilmi ile&i stringleri birbirinin arkasna ekler, bindirilmi . ile&i bir stringi dierine atar, bindirilmi 44 ile&i bir string nesnesini g!stertir, ve 01 bindirilmi ile&i stringin herhangi bir esine eriimi salar# (imdi %karda anlatlan ap& ilevler ve ilelerin k%llanlmasn !rnekle g!sterelim* BBC$@DCstringD#&pp BBstring sn+na giri .in! %de -iostream* .in! %de -string* BB ap& ilevlerin k%llanm %sing namespa!e std / int main( )< string &ir(=>i"ango+?) / BBD n%maral ap& ilev !o%t--&ir--end / BBbindirime %ram 44 string iki(17, )@)) / BBE# ap& ilev k%llanm !o%t--iki--end / string %!(&ir) / BBF# ap& ilev k%llanm !o%t--%!--end / &ir+,?Aa""+? / BB+. bindirimi

!o%t--&ir--end / iki,?B%s%ra &akma+? / %!C7D,)S) / string dort / BBG# ap& ilev k%llanm dort,iki+%! / BB+ ve . bindirilmi !o%t--dort--end / !har hepsiC D,?i"i &iten herse" i"idir? / string &es(hepsi, 1:) / BBH# ap& ilev k%llanm !o%t--&es--?+En? / string a ti(hepsi+1F, hepsi+17) / BB># ap& ilev k%llanm !o%t--a ti--?,? / string "edi(6&esC1FD, 6&esC17D) / BB ine ># ap& ilev !o%t--"edi--?...En? / IBBBCJ Kr)gramn kts aadaki gibidir* Ki ang) LLLLLLLLLL Ki ang)M Ki ang)M Na M K%s%ra bakmaM Si ang)M i i biten herse i i, i i

string i k deGer atama (,&a2 atma) s3n3r ama ar3


stringler tek karakter, 'SCOO ve a integer bir deerle balatlama"lar# <rnek* string str1(=a?) / string str1(7'87) / BB)lama", hata "ira tek karakter BB)lama", hata "ira integer

$% balatma k)%l% atama ve k)p a ap& ilevle aplan ilk deer atamalar iinde geerlidir#

string s3n3# girdi eri


string sn+ ile ilgili baka !nemli bir k)n%da, girdilerle ilgili

seeneklerdir# C biimi string armlar iin seenek b%l%n%r* !har &i giC177D / !in**&i gi / BBbir kelime )k% !in.get ine(&i gi, 177) / BBbir satr )k%, g!"ard etPn !in.get(&i gi, 177) / BBbir satr )k%, k% r%kta brakPn string nesnesinin girdi seenekleri nelerQ# String sn+ !n&e 55 ile&ini bindirime %ratr# 8lk nesne (!in) string nesnesi )lmad iin, 55 ile&i string sn+ !ntemi deildir# On%n erine, istream nesnesini -!in) ilk deikeni )larak, string nesnesini de ikin&i deikeni )larak alan genel bir ilevdir# $%ndan baka, C deki 55 ile&inin stringlerle k%llanmnda t%tarl )lmak adna, C++ stringleri de* tek kelime )k%r, b)l%a rastladnda girii s)nlandrr, d)s a s)n%n% alglar, ve a string nesnesine saklanabilen en +a"la sa daki karaktere %laabilir# 8lev !n&elikle hede+ stringin ieriini siler ve daha s)nra her se+erinde bir karakter )lmak "ere )k%r ve a"ar# String nesnesine i"in verilen karakter sa sndan daha a" sa da giri aplrsa, operator**(istream6, string6) ilevi string nesnesinin b) %t%n% )t)matik )larak girie % d%r%r# <"et )larak %n% s! le ebiliri"* 55 ile&ini C biiminde )ld%% gibi C++ da da a nen k%llanabiliri"# ' r&a di"i b) %t%n%n ala&a h%s%s%nda k)rkmam" da gerekme"# !har dos"a$adC17D / !in**dos"a$ad / string ad / !in** ad / BBR karakterden b k )ld%%nda s)r%n kar BB)k )k %"%n kelimeleri )k% abilir

get ine( ) ilele g!sterilemedii iin get ine( ) ilevinin edeerini k) mak -operator**( ) ilevinden +arkl/ bira" daha a" e++a+tr, )n%n erine elik g!sterimi k%llanlr# !in.get ine(dos"a$ad, 17) / String nesnesini ben"er biimde a"abilmek iin de istream sn+na eni bir e ilev eklenmesi gerekir# 6abii b% akll&a )lma"d# On%n erine string ktphanesinde e )lma an get ine( ) ilevi tanmlanr# $% ilev ilk deiken )larak istream nesnesi, ikin&i deiken )larakta string nesnesi alr# $! le&e giriten string nesnesine bir satr )k%mak iin *

string tam$ad / get ine(!in, tam$ad) / BB&in#getline-d)s aSad, D@/ erine $%rada get ine( ) ilevi !n&e var stringini siler daha s)nra giri srasndan her se+erinde bir karakter )k%r ve b%n% stringe ekler# $% ilem, ilev satr s)n%na gelene kadar, d)s a s)n% alglanana kadar, ve a string nesnenin kapasite snrna kadar srer# Ter eni satr -Pn/ karakteri alglanrsa, b% karakter )k%n%r +akat string nesnesine eklenme"# $%rada hemen bir e i belirtelim* istream srmne ben"eme en biimde string srmde, )k%na&ak karakterlerin maksim%m sa sn veren b) %t deikeni b%l%nma"# $%n%n nedeni* string nesnesinin b) %t% )t)matik )larak a arlamasdr# 'adaki !rnek iki trl giri seeneini g!stermektedir* BBC$@EC StringE#&pp BBstring girileri .in! %de -iostream* .in! %de -string* %sing namespa!e std / int main( )< string ke ime / !o%t--?Bir satir girH ? / !in**ke ime / (hi e(!in.get( )+,)En)) !ontin%e !o%t--ke ime--?hepsi isteni enmi. En? / string satir / !o%t--?tam &ir satir girH? / get ine(!in, satir) / !o%t--?SatirH =--satir--end / IJJJHK $% pr)gram parasnn kts * $ir satir girC >ara ar3n tamam3 on%nd% Karalarn hepsi istenilenmi tam bir satir girC &% Lrnek program3 herkes &egenirdi degi mi SatirC b% !rnek pr)gram herkes begenirdi degilmi

String er e L&r i2 em er
$%ra a kadar string nesnelerini )l%t%rmann deiik )llarn !rendik# String nesnesinin ieriini g!stermek, verileri string nesnesine )k%mak, string nesnesine ekleme apmak, string nesnesine atama apmak, ve string nesnelerini birbirine eklemek b%nlarn arasndadr# $aka neler aplabilirQ# Stringleri karlatrabilirsini"# 'lt tane )lan ilikinlik ilelerinin tamam, string nesnelerin&e bindirime %ratlr# $ir string nesnesi dierinden makine metin karlatrmasnda daha !n&e er alrsa, ilki dierinden daha kk kab%l edilir# Uakine metin karlatrma sras MSC;; k)d ise, b%n%n anlam* sa lar b k karakterlerden daha kk, b k karakterlerde kk karakterlerden kk demektir# 3er ilikinlik ile&i trl bindirime %ra abilir* a bir string nesnesini baka bir string nesnesi ile karlatrrsn", a bir string nesnesini C ben"eri string ile karlatrrsn", a da C ben"eri stringi bir string nesnesi ile karlatrrsn"# string snake1(=!o&ra?) / string snake1(=!ora ?) / !har snake5C17D,?ana!onda? / i#(snake1-snake1) / JJ)perat)r4-&)nst stringV, &)nst stringV/ ..... i#(snake1,,snake5) / JJ)perat)r..-&)nst stringV, &)nst &harW/ ..... i#(snake5+,snake1) / JJ)perat)rM.-&)nst &harW, &)nst stringV/ String b kl de saptanabilir# Stringte b%l%nan karakterlerin sa s size( ) ve ength( ) e ilevleri b%n% gerekler# i#(snake1. ength( ),,snake1.size( )) !o%t--?her iki string a"n3 &o"da?--end / 7erek size( ) gerekse ength( ) ilevleri a n g!revi apmasna ramen neden ikisi de var# $%n%n nedeni* ength( ) ilevinin string sn+nn ilk srmlerinde b%l%nmas, size( ) ilevinin standart kalp ktphanesi % %ml%l%% salamak iin )l%t%r%lmasdr# $ir string iinde alt stringler ve a karakterleri deiik )llarla ara abilirsini"# #ind( ) !nteminin d!rt deiik k%llanm ani bindirim )l%

aada g!sterildi*

#ind( ) i2 evinin &indiri mi2 ha i


NLntem Lntipi size$t"pe #ind(!onst string6 str, size$t"pe pos,7)!onst MO3k amas3 $irin&i str altstringini p)s n)k? tasndan arama a bala arak b%l%r#$%ld%% "aman altstring ilk karakter srasn geri d!ndrr, aksi taktirde stringCCnp)s geri d!ner# $irin&i s altstringini p)s n)kta? sndan arama a bala arak b%? l%r# $%ld%% "aman altstring ilk karakter srasn geri d!n? drr, aksi taktirde stringCCnp)s geri d!ner# $irin&i s altstringinin ilk n ka? rakterini p)s n)ktasndan ara? ma a bala arak b%l%r# $%ld%%nda altstring ilk ka? rakter srasn geri d!ndrr# 'ksi taktirde stringCCnp)s geri d!ner# $irin&i &h karakterini p)s n)kta? sndan arama a bala arak b%? l%r# $%ld%%nda karakter sras geri d!ndrlr# 'ksi d%r%mda stringCCnp)s geri d!ner#

size$t"pe #ind(!onst !har0 s, size$t"pe pos,7)!onst

size$t"pe #ind(!onst !har0 s, size$t"pe pos,7, size$t"pe n)!onst

size$t"pe #ind(!har !h, size$t"pe pos,7)!onst

Ktphanede b%nlardan baka, bindirilmi #ind( ) !nteminin a n kn ede -a ralar arasndakiler/ ben"er !ntemler b%l%n%r* r#ind( ), #ind$#irst$o#( ), #ind$ ast$o#( ), #ind$#irst$not$o#( ), #ind$ ast$not$o#( ). r#ind( ) !ntemi altstring ve a karakterin s)n ke" )l%%m%n% b%l%r#

#ind$#irst$o#( ) deikende er alan karakterlerden herhangi birinin stringte ilk ke" b%l%nd%% sra verir# <rnek* int nerede,snake1.#ind$#irst$o#(=mark?) / =!o&ra? da er alan =r? har+inin srasn b%l%r#-=!o&ra? nn n& har+i =r?/# $%n%n nedeni =mark? karakterlerinden X!o&ra? da ilk rastlanan karakterin =r? )lmasdr# #ind$ ast$o#( ) !ntemi de ben"er +akat ters biimde alr# 9ani s)n%n&% ben"er karakterin )ld%% sra verir# int nerede,snake1.#ind$ ast$o#(=mark?) / =mark? n =!o&ra? da b%l%nan s)n karakteri =a? dr# =a? karakteri =!o&ra? nn d!rdn& karakteridir ve !ntem b% sra deerini geri d!ndrr# #ind$#irst$not$o#( ) !ntemi ise deikende )lma an stringin ilk karakterini verir# int nerede,snake1.#ind$#irst$not$o#(=mark?) / =!o&ra? da =mark? ta b%l%nma an ilk karakter =!? dir# =!? nin =!o&ra? daki eri birin&i sradr, ani bir -D/ d!ndrlr# #ind$ ast$not$o#( ) !ntemi ise deikende )lma an stringin s)n karakter erini verir# int nerede,snake1.#ind$ ast$not$o#(=mark?) / =!o&ra? da =mark? ta b%l%nma an s)n karakter =&? dir# =&? nin =!o&ra? daki eri n& sradr, ani -F/ geri d!ndrr# =aha )k sa da !ntem b%l%nmaktadr, string !ntemlerinin adlar kitabn balang&nda a rntlara girmeden verilmiti# $a"larnn a rntlarn verelim* BBstring ilemleriC !onst !harP0 !$str( ) !onst/ !onst !harP0 data( ) !onst/ a o!ator$t"pe get$a o!ator( ) !onst / BBstring karlatrmalarC

int !ompare(!onst &asi!$string6 str) !onst/ int !ompare(size$t"pe pos1, size$t"pe n1, !onst &asi!$string6 str) !onst/ int !ompare(size$t"pe pos1, size$t"pe n1, !onst &asi!$string6 str, size$t"pe pos1, size$t"pe n1) !onst/ int !ompare(!onst !harP0 s) !onst/ int !ompare(size$t"pe pos1, size$t"pe n1, !onst !harP0 s) !onst/

int !ompare(size$t"pe pos1, size$t"pe n1, !onst !harP0 s, size$t"pe n1) !onst/ &asi!$string6 append(!onst &asi!$string6 str)/ &asi!$string6 append(!onst &asi!$string6 str, size$t"pe pos, size$t"pe n)/ &asi!$string6 append(!onst !harP0 s, size$t"pe n)/ &asi!$string6 append(!onst !harP0 s)/ &asi!$string6 append(size$t"pe n, !harP !)/ temp ate-! ass ;np%t;ter* &asi!$string6 append(;np%t;ter #irst, ;np%t;ter ast)/ void p%sh$&a!k(!harP !)/ &asi!$string6 assign(!onst &asi!$string6 str)/ &asi!$string6 assign(!onst &asi!$string6 str, size$t"pe pos, size$t"pe n)/ &asi!$string6 assign(!onst !harP0 s, size$t"pe n)/ &asi!$string6 assign(!onst !harP0 s)/ &asi!$string6 assign(size$t"pe n, !harP !)/ temp ate-! ass ;np%t;ter* &asi!$string6 assign(;np%t;ter #irst, ;np%t;ter ast)/ &asi!$string6 insert(size$t"pe pos1, !onst &asi!$string6 str)/ &asi!$string6 insert(size$t"pe pos1, !onst &asi!$string6 str, size$t"pe pos1,size$t"pe n)/ &asi!$string6 insert(size$t"pe pos, !onst !harP0 s, size$t"pe n)/ &asi!$string6 insert(size$t"pe pos, !onst !harP0 s)/ &asi!$string6 insert(size$t"pe pos, size$t"pe n, !harP !)/ iterator insert(iterator p, !harP !)/ void insert(iterator p, size$t"pe n, !harP !)/ temp ate-! ass ;np%t;ter* void insert(iterator p, ;np%t;ter #irst, ;np%t;ter ast)/ &asi!$string6 erase(size$t"pe pos , 7, size$t"pe n , npos)/ iterator erase(iterator position)/ iterator erase(iterator #irst, iterator ast)/ &asi!$string6 rep a!e(size$t"pe pos1, size$t"pe n1, !onst &asi!$string6 str)/ &asi!$string6 rep a!e(size$t"pe pos1, size$t"pe n1, !onst &asi!$string6 str, size$t"pe pos1, size$t"pe n1) / &asi!$string6 rep a!e(size$t"pe pos, size$t"pe n1, !onst !harP0 s, size$t"pe n1) /

&asi!$string6 rep a!e(size$t"pe pos, size$t"pe n1, !onst !harP0 s) / &asi!$string6 rep a!e(size$t"pe pos, size$t"pe n1, size$t"pe n1, !harP !) / &asi!$string6 rep a!e(iterator i1, iterator i1, !onst &asi!$string6 str) / &asi!$string6 rep a!e(iterator i1, iterator i1, !onst !harP0 s, size$t"pe n) / &asi!$string6 rep a!e(iterator i1, iterator i1, !onst !harP0 s) / &asi!$string6 rep a!e(iterator i1, iterator i1, size$t"pe n, !harP !) / temp ate -! ass ;np%t;terator* &asi!$string6 rep a!e(iterator i1, iterator i1, ;np%t;terator Q1, ;np%t;terator Q1) / size$t"pe !op"(!harP0 s, size$t"pe n, size$t"pe pos,7) !onst /void s(ap (&asi!$string6 str) / String karakter karlatrmalar ile ilgili !rneklerin bir ksm ilk &iltte verilmiti# =ilerseni" bakabilirsini"# $indirilmi ilikinlik ileleri, stringlerin sa lar gibi ilenmesini salar# Rhi e(tahmin er*7 66 atis+,hede#) $%, C stringlerindeki str!mp( ) ilevinin k%llanlmasndan daha k)la dr# 3emen bir e daha belirtelim* npos string sn+nn stati! esidir# npos deeri string sn+ nesnesinde b%l%nan karakterlerin maksim%m sa sdr# =i"in s+rdan balad iin, )las en b k di"inin D -bir/ b dr# $%ndan d)la bir karakter ve a stringi ararken hata g!stermede k%llanlabilir#

string nesne k% an3m3nda C i2 ev &indirimi


string nesnelerini karlatrrken bindirilmi ,, ile&i k%llanlr# Yakat b k har+ kk har+ a rma !"ellii nedeni ile, b% ile ba" d%r%mlarda s)r%nlara neden )l%r# 9ani b k har+ kk har+ a rm istenmedii "aman baka !"m b%l%nmas gerekir# =%r%m% bir !rnekle akla alm*

.in! %de -string* BBstring nesnesi iin ### string strM / !in**strM / BBk%llan& se ami adn girsin string strB,?Se ami? / BBbellee k)nan sabit i#(strM,,strB)< !o%t--?string er a"ni.En? /I e se< !o%t--?string er a"ni degi .En? /I se ami)deki s i e Se ami)deki S arasndaki +arktan d)la kt* string er a"ni degi )l%r# Keki bi" b k har+ kk har+ +arkn g!"ard etmek istersek ne apmal "# )k sa da C ktphanesinde, stri!mp( ) ve $stri!mp( ) b k kk har+leri a rma an ilevler b%l%n%r# $%rada bir hatrlatma apalm* b% ilevler C standardnda b%l%nmamaktadr# O "den b% ilevlerin si"e ait bindirilmi srmlerini a"man", ve )nlar pr)gramn"a eklemeni" gerekebilir# (imdi %kardaki !rnein ben"erini b k har+ kk har+ +arkn g!"ard ederek a"alm* .in! %de -!string* BBstri&mp- / ilevi iin .in! %de -string* BBstring nesneleri iin ### string strM / !in**strM / BBk%llan&nn se ami girdiini kab%l edelim string strB,?Se ami? / BBbellekteki sabit in ine &oo stri!mp(!onst stdHHstring6 strM, !onst stdHHstring6 strB)< BBbindirilmi ilev ret%rn stri!mp(strM.!$str( ), strB.!$str( )),,7 / BBC ilevi I &oo &StringsMreST%a ,stri!mp(strM, strB) / 9%kardaki basit a"m biimi ile har+ b klklerini g!"ard ederek, string !"deliklerini sna abilirsini"#

Uizin "eri &e i LGe"i, CD ve at( ) i2 evi i e &% mak


C biimi a"mda, di"ide herhangi bir erdeki karakteri b%labilmek iin, CD k!eli a ralar k%llanlmakta d# C++ string sn+ sa esinde at( ) ilevi ile a n ilem k)la &a gereklenebilir# <rnek* string s(=a&!de#?) / !o%t--sC1D--? = / !o%t--s.at(1)--end / kt* !! Tvet, b%rada her iki k%llanm a n gibi g!"kmesine ramen, aslnda CD ile at( ) ilevi arasnda b k bir +ark b%l%nmaktadr# at( ) ilevi di"i snrlarnn dnda bir !e e eriilmek istendii "aman istisna +rlatlmasn salar, CD -k!eli a ralar/ ise si"i b% d%r%mda bir ban"a brakr# <rnek* string s(=a&!de#?) * sC:D / BBalma srasnda hata a )laar, "ira di"i d tr"< BBistisna +rlatma denemesi apabilirsini"# s.at(:) / I!at!h(...)< !err--?dizi s3n3r ar3 d323na O3k3 d3?--end /I Kr)gram&lkta istisnalar pr)gram k%rg%s%n%n dnda kalan deerleri ierirler# $% deerler aslnda istenme enler )l%p, k%llanlma a kalkld "aman pr)gramn dengesini alt st ede&ek s)n%lara )laabilirler# O nedenle istisna !netimi birin&i kitapta da belirttiimi" gibi !nemli bir k)n%d%r# $%rada da at( ) gibi istisna +rlatma sala a&ak ilevi, CD erine k%llanmak )ld%ka ararldr# 8stisnai d%r%m )rta a kt "aman, istisna !neti&isi, pr)gramn d"enini srdrmek iin, s)nraki e lemleri )na g!re d"enler# 9ani si" pr)gramn" )na g!re gelitirirsini"# (imdi string !ntemlerinin k%llanld elen&eli bir pr)gram a"alm# Kr)gramm" adam asma ) %n%n gra+ik % g%lamasdr# Kr)gram be har+li kelimelerden )l%an string nesneler di"isine sahiptir, ve geliig"el )larak b%nlarn iinden birini seer# Si"de b% kelime i tahmin etme e alrsn"#

Kelime i har+ tahminleri ile b%la&aksn"# BBC$@DCstringF#&pp BBstring k%llanlan elen&eli bir adam asma pr)gram .in! %de -iostream* .in! %de -string* .in! %de -!std i&* .in! %de -!time* .in! %de -!!t"pe* %sing namespa!e std / !onst int VWM,17 / !onst string ke ime$ istCVWMD,<=izmir?, =&%rsa?, =sinop?, =siirt?, =sivas?, =!or%m?, =ki is?, =tokat?, =m%g a?, =kon"a?I/ int main( )< srand(time(7)) / !har o"na / !o%t--?ke ime o"%n% o"na"a imX-"Jn*? / !in**o"na / o"na,to o(er(o"na) / (hi e(o"na,,)"))< string hede#,ke ime$ istCrand( ) Y VWMD / int ength,hede#. ength( ) / string attempt( ength, )4)) / string &ad!hars / int tahmin er,9 / !o%t--?giz i ke ime"i tahmin et. Wz%n %k?-- ength --?tahmin edi en har# erEn? --?her se#erinde &ir har# i e e indeki?--tahmin er --?tahminde hata .En? / !o%t--?ke imenizH =--attempt--end / (hi e(tahmin er*7 66 attempt+,hede#)< !har har# / !o%t--?&ir har# tahmin etH = / !in**har# / i#(&ad!hars.#ind(har#) +, stringHHnpos ZZattempt.#ind(har#) +, stringHHnpos)< !o%t--?tahmin ettin, &ir daha denermisinX.En? / !ontin%e / I int o!,hede#.#ind(har#) /

i#( o!,,stringHHnpos)< !o%t--?"an is tahmin+En? / 44tahmin er / &ad!hars+,har# / JJstringe ekle I e se< !o%t--?dogr% tahmin +En? / attemptC o!D,har# / o!,hede#.#ind(har#, o!+1) / JJhar+ ine belirirse (hi e( o!+,stringHHnpos)< attemptC o!D,har# / o!,hede#.#ind(har#, o!+1) / I I !o%t--?ke imenizH =--attempt--end / i#(attempt+,hede#)< i#(&ad!hars. ength( )*7) !o%t--?&er&at se!im erH =--&ad!hars--end / !o%t--tahmin er--?&er&at tahmin er ka diEn? / I I i#(tahmin er*7) !o%t--?tamam dogr%.+ En? / e se !o%t--?k%s%ra &akma ke imeH =--hede#--?.En? / !o%t--?&ir daha denermisinX.-"Jn*? / !in**o"na / o"na,to o(er(o"na) / I !o%t--?e vedaEn? / ret%rn 7 / IJJHK Kr)gram Lin%Z,ta derlediini"de k)ns)lda adam asma ) na abilirsini"#

Ba2ka ne er var
String ktphanesinde b%l%nan ilevler, baka de imle !ntemler

kmesinin salad k)la lklar, %kardakilerle snrl deildir# Stringin bir ksmn ve a tamamn silen, bir string ile dier bir stringin bir parasn ve a tamamn erdeitiren, stringe baka %ns%rlar ekle en ve a silen, bir string ile baka bir stringin bir parasn ve a tamamn karlatran, bir stringten bir alt stringi b%l%p karan ilevler b%l%nmaktadr# $ir ilevde, bir stringin bir parasn dier bir stringe k)p alamaktadr# ' r&a string ieriklerini dei t)k% eden bir ilevde b%l%nmaktadr# $% ilevler string nesneleri ile altklar kadar, bindirime %ratlarak C ben"eri stringlerle de, a n biimde alrlar# $%rada bir)k ksmda, stringleri !har tiplermi gibi ele alarak in&eledik# 'slnda daha !n&e de belirttiimi" gibi string sn+ gerekte kalp -temp ate/ sn+na aslanarak gelitirilmitir# temp ate-! ass !harP, ! ass traits,!har$traits-!harP*, ! ass M o!ator,a o!ator-!harP** &asi!$string<....I / Sn+ta aadaki iki t"pede# b%l%n%r* t"pede# &asi!$string-!har* string / t"pede# &asi!$string-(!har$t* (string / S)n satr (!har$t tabanl stringlerin k%llanmn i"in verir# 3atta si" belli k)%llar erine getirip karakter ben"eri %ns%rlar iin bir sn+ gelitirebilir ve basi!$string kalp sn+n )n%nla k%llanabilirsini"# traits sn+ seilen karakterlerin !ne kan !"elliklerini tanmla an bir sn+tr, !rnek )larak deerlerin karlatrma biimini aklamas gibi# !har ve (!har$t tipleri iin, !har$traits kalbnn !n&eden tanmlanm !"ellikleri b%l%n%r# Ne b%nlar traits kalbnn varsa lanlardr# M o!ator sn+, bellek erleimini !neten sn+tr# !har ve (!har$t tipleri iin a o!ator kalbnn !n&eden tanmlanm !"ellikleri vardr# $%nlar da a o!ator varsa lanlardr# 7enellikle ne( ve de ete ileleri bellek erleiminde k%llanlr# 'ma isterseni" bellein bir erini kendi bellek !netim biimlerini" iin a rp k%llanabilirsini"# $% da si"in eteneklerini"e bal# 'slnda here si"in paradigmalar kavra p )nlar % g%lama be&erilerini"e kalmtr# $%rada k%rallar anlatlr birka !rnekle % g%lama g!sterilir, geri kalan sahneleri ve ) %nlar si" ) namalsn"# Kr)gram&lk k%rallar ilgili dil tara+ndan k)nm% "eka sanatdr# A)talar herkes !renebilir ama, t%t%lan beste i herkes apama"#

[VSBLS[
14 =)%m tarihlerini )k% %p )na la an bir pr)gram !rnei
//B:dogum tarihlerini okuyup onaylama #include <iostream> #include <string> using std::cout; using std::cin; using std::endl; using std::string; int int int int valid_input(int lower, int upper, const string year(!; month(!; date(int month_value, int year_value!; description!;

int main(! " cout << #$nter your date o% &irth'# << endl; int date_year ( year(!; int date_month ( month(!; int date_day ( date(date_month, date_year!; string months)* ( "#+anuary#, #,e&ruary#, #-arch#, #.pril#, #-ay#, #+une#, #+uly#, #.ugust#, #/eptem&er#, #0cto&er#, #1ovem&er#, #2ecem&er# 3; string ending ( #th#; i%(date_day (( 4 55 date_day (( 64 55 date_day (( 74! ending ( #st#; else i%(date_day ((6 55 date_day (( 66! ending ( #nd#; else i%(date_day (( 7 55 date_day (( 67! ending ( #rd#; cout << << << << 3 endl #8e have esta&lished that your were &orn on # months)date_month94* << # # << date_day << ending #, # << date_year << #'# << endl;

return :;

// ;pper ve lower aras<nda &ir int de=er okur int valid_input(int lower, int upper, const string description! " int data ( :; cout << #>lease enter # << description << # %rom # << lower << # to # << upper << #: #; cin >> data; while(data<lower 55 data>upper! " cout << #?nvalid entry; please re9enter # << description << #: #; cin >> data; 3 return data; 3

// @<l< okur int year(! " const int low_year ( 4AB:; // 4BB yaC<ndan &DyDk insan olmaE const int high_year ( 6:::; // B yaC<ndan kDFDk olmaE''' return valid_input(low_year, high_year, #a year#!; 3 // .y< okur int month(! " const int low_month ( 4; const int high_month ( 46; return valid_input(low_month, high_month, #a month num&er#!; 3 // Gerilen ay ve y<ldaki tarihi okur int date(int month_num&er, int year! " const int date_min ( 4; const int %e& ( 6; // .ylar<n gDn say<s<: +an ,e& -ar .pr -ay +un +ul .ug /ep 0ct 1ov 2ec static const int date_maH)* ( " 74, 6A, 74, 7:, 74, 7:, 74, 74, 7:, 74, 7:, 743; // @ukar<daki diEi static olarak &elirtildi=i iFin, iClev sadece ilk keE //Fa=r<ld<=< Eaman oluCturulur' Ia&ii, &ir keE Fa=r<ld<=< iFin hiF&ir &ilgi //&ellekte saklanmaE' // Ju&at art<k y<llarda 6K(%e& 6K! olur' .rt<k y<l L e &MlDne&ilen y<ld<r // 4:: e &MlDne&ilenler hariF %akat L:: e &MlDne&ilenler dahil' i%( month_num&er (( %e& yearNL (( : O(year N 4:: (( : yearNL:: O( :!! return valid_input(date_min, date_maH)month_num&er94*P4, #a date#!; else return valid_input(date_min, date_maH)month_num&er94*, #a date#!;

IBBBCJ

E? String karakterlerini tersten a"an pr)gram


//B: string karakterlerini tersten yaEma Mrne=i /QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ reverse(! iClevi string tipinin de=iCkeni ile veya &ir R9&iFimi yani ST:Ssonlanan string ile Fal<C<r' QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ/ #include <iostream> #include <string> using std::cout; using std::cin; using std::endl; using std::string; string reverse(string str4!; int main(! " string sentence; cout << #$nter a seUuence o% characters, then press S$nterS: # << endl; getline(cin, sentence!; cout << endl << #@our seUuence in reverse order is: # << endl; cout << reverse(sentence! << endl; cout << #Vere is a demonstration o% reverse(! working with a R9style string# << endl;

char stu%%)* ( #a&cde%g#; // R9style string cout << endl << #Ihe original string is: T## << stu%% << #T## << endl << #Weversed it &ecomes: T## << reverse(stu%%! << #T## << endl; 3 return :;

// stringi tersten yaE // Buradaki kod, de=iCkenin kopyas< ile Fal<C<yor // o nedenle esas string etkilenmiyor string reverse(string str! " char temp ( :; %or(int i(:; i < str'length(!/6; iPP! " temp ( str)i*; str)i* ( str)str'length(!9i94*; str)str'length(!9i94* ( temp; 3 return str;

3///:X

F? K)m%t satrndan girilenleri tersten a"an pr)gram


#include <iostream> #include <string> using std::cout; using std::endl; using std::string; string reverse(string str4!; int main(int argc, charQ argv)*! " switch(argc94! " case 6: %or(int i ( 4; i < argc; iPP! cout << #.rgument # << i << # is # << argv)i* << endl; cout << #argument 6 reversed is : T## << reverse(argv)6*! << #T## << endl; &reak; de%ault: cout << #@ou entered the incorrect num&er o% arguments' # << endl << #>lease enter 6 arguments' # << endl; 3 return :; 3 // stringi tersten yaE // Buradaki kod de=iCkenin kopyas< ile Fal<C<yor // o nedenle esas string etkilenmiyor string reverse(string str! " char temp ( :; %or(int i(:; i < str'length(!/6; iPP! " temp ( str)i*; str)i* ( str)str'length(!9i94*; str)str'length(!9i94* ( temp; 3 return str; IBBBCJ

G? $ir stringin altstringini ara p b%lma ve )n% baka ikin&i bir stringe erletirme#
//B: Mrnekte &ir stringin altstringini &ulup &aCka &ir stringte yerleCtirme'

#include <iostream> #include <string> #include <cctype> using std::cout; using std::cin; using std::endl; using std::string; int main(! " string teHt; // aranan string cout << #$nter the teHt that is to &e searched terminated &y #:# << endl; std::getline(cin, teHt, S#S!; string teHtcopy ( teHt; // stringin kopyas<n< alma // Yopyay< kDFDk har%e Fevirme %or(int i ( : ; i<teHtcopy'length(! ; iPP! teHtcopy)i* ( std::tolower(teHtcopy)i*!; string word; // Bulunacak kelime cout << #$nter a word that is to &e %ound in the string : #; cin >> word; string wordcopy ( word; %or(int i ( : ; i<wordcopy'length(! ; iPP! wordcopy)i* ( std::tolower(wordcopy)i*!; // kelimenin kopyas<n< oluCturma // Yopyay< kDFDk har%e Fevirme

// Yelimedeki har% say<s< kadar asteriksle (Q! string oluCtur string asterisks ( word; asterisks'replace(:, asterisks'length(!, asterisks'length(!, SQS!; cout << #$ach occurrence o% T## << word << #T# will &e replaced &y # << asterisks << #'# << endl; // wordcopySyi teHtcopy nesnesi iFinde ara // ama teHt iFinde asteriksle((Q! de=iCtir' int position ( :; while((position ( teHtcopy'%ind(wordcopy, position!! O( string::npos! " // Bulunan kelimeden Mnceki ve sonraki karakterlerin a&ecesel olmad<=<n< //denetlemek Eorunday<E, ama diEi de=erlerini kullanmamaya dikkat etmeli // Eira geFersiE olur9 &Mylece sadece i%ler kullan<l<r' i%(position((:! " i%(Ostd::isalpha(teHtcopy)positionPword'length(!*!! teHt'replace(position, word'length(!, asterisks!; 3else i%(positionPword'length(!((teHt'length(!! " i%(Ostd::isalpha(teHtcopy)position94*!! teHt'replace(position, word'length(!, asterisks!; 3 else " i%(Ostd::isalpha(teHtcopy)position94*! Ostd::isalpha(teHtcopy )positionPword'length(!*!! teHt'replace(position, word'length(!, asterisks!; 3 position P( word'length(!; 3 cout << endl << #.%ter processing the original string is now:# << endl << teHt << endl;

IBBBCJ

return :;

H? <ren&ilerin n)tlarn b%l%nd%ran n)t de+teri tasarm

BB !ren&ilerin n)t de+teri )larak iki di"i k%llanm #include <iostream> #include <string> using std::cout; using std::cin; using std::endl; using std::string; int main(! " const int -.Z_/I;2$1I/ ( 4::; string student_names)-.Z_/I;2$1I/*; dou&le student_marks)-.Z_/I;2$1I/* ( ":3; int student_count ( :; dou&le total_marks ( :; dou&le class_average ( :; char answer ( SnS; // Geri giriC dMngDsD' Bu dMngD M=renci notlar<n<n M=retmen tara%<ndan //girilmesini sa=lar' do " cout << #$nter a studentSs name: #; cin >> student_names)student_count*; cout << #$nter # << student_names)student_count* << #TSs mark: #; cin >> student_marks)student_count*; total_marks P( student_marks)student_countPP*; cout << #2o you wish to enter another studentSs details (y/n!: #; cin >> answer; 3 while (tolower(answer! (( SyS student_count < -.Z_/I;2$1I/!; i%(student_count (( -.Z_/I;2$1I/! cout << endl << #-aHimum num&er o% students reached'# << endl; // Ralculating the class average' class_average ( total_marks / student_count; // /<n<% ortalamas<n< gMsterme' cout << endl << #Ihe class average %or # << student_count << # students is # << class_average; cout << endl; // [=renci isim ve notlar<n< gMsterme' %or(int i ( :; i < student_count ; iPP! cout << endl << student_names)i* << #TtTt# << student_marks)i*; cout << endl; return :;

IBBBCJ

>? Aem deerlerinin )rtalamasn alma, saklama, ve g!sterme ilemlerini iki b) %tl% di"i ile gerekletirme
//B: \ki &oyutlu diEi ile nem de=erlerinin ortalamas<n< alma, saklama ve //gMsterme #include <iostream> #include <string> using std::cout; using std::cin; using std::endl; using std::string;

int main(! " const string days)* ( "#-onday#, #Iuesday#, #8ednesday#, #Ihursday#, #,riday#3; const string times)* ( "#morning#, #midday#, #evening#3; %loat humidity)siEeo% days/siEeo% days):**)siEeo% times/siEeo% times):** ( ":':%3; %loat day_averages)siEeo% days/siEeo% days):** ( ":':%3; %loat week_averages)siEeo% times/siEeo% times):** ( ":':%3; // 1em &ilgisinin giriCi iFin dMngDler kullan<l<r ve tamam< &iriktirilir' %or(int day ( : ; day < siEeo% days/siEeo% days):* ; dayPP! " cout << endl << days)day* << endl; %or(int time ( : ; time < siEeo% times/siEeo% times):* ; timePP! " cout << # $nter # << times)time* << # reading: #; cin >> humidity)day*)time*; week_averages)time* P( humidity)day*)time*; // 0 an iFin toplam< //&iriktir day_averages)day* P( humidity)day*)time*; // 0 gDn iFin toplam< //&iriktir' 3 3 cout << endl; // VergDn iFin ortalamay< F<kt<ya gMnderme %or(int day ( : ; day < siEeo% days/siEeo% days):* ; dayPP! cout << #.verage humidity %or # << days)day* << #: # << day_averages)day*/(siEeo% times/siEeo% times):*! << endl; cout << endl; // Ver se%erinde ha%tal<k ortalamay< F<kt<ya gMnderme %or(int time ( : ; time < siEeo% times/siEeo% times):* ; timePP! cout << #.verage # << times)time* << # humidity: # << week_averages)time*/(siEeo% days/siEeo% days):*! << endl; return :;

IBBCJ

9%kardaki !rnek !"mlerde X%sing stdHH!o%t*[, X%sing stdHHend /[,vs## ben"eri %sing bildirimlerini g!rdn"# $%rada sade&e ilgili nesnenin -!o%t, end , string ## vs#/ standart isim alanlar kab%l edilmi demektir# 9ani standart ktphanenin tamamn ieren X%sing namespa!e std/[ isim alan erine, tek tek ilgili nesnelerin standart isim alanlar seilmitir# $! le&e derle i&inin isimlerle ilgili kapsama alan daraltlmtr# Kr)gram daha verimli klnmtr# %sing stdHH!o%t ve %sing stdHH!err* vs ben"eri aklamalar %sing bildirimi, %sing namespa!e std/ ise %sing !nergesidir# Kr)gramlarn"da %sing bildirimlerinin sa s a"lama a&ak kadar )alrsa, b%nlarn erine X%sing namespa!e std/ X %sing !nergesini k%llanmak daha elverilidir# $%rada bir +ark daha anlatalmC ,a, bir karakteri, Xa[ ise bir stringi g!sterir#

1.BLM
\][U]LS[ ve ^;BP;LM[
Kr)gram&lkta girdi, pr)grama pr)gramn herhangi bir annda giren bilgi, kt ise, pr)gramdan pr)gramn herhangi bir annda kan bilgi demektir#7iren bilgi ani girdi, evresel birimden gelebildii gibi pr)gramn iindeki bir baka d)s adan da )labilir# kt ise pr)gramdan herhangi bir evresele aplabildii gibi baka bir pr)grama dahi )labilir# $%rada evreselden kastedilen* klav e, m)nit!r, a"& vs# d)nanmlardr# C++ dilinin 7irdiBkt -.Onp%tBO%tp%t/ ilemlerini in&eleme srasnda genel bir s)r%nla karlalr# :ira bir andan, % g%lamalarn en basitinde bile girdiBkt ilemlerinin )lmas, ve dil !renme sre&inde karlalan ilk g!revin b%nlar !renme ")r%nl%l%%, !br andan C++ nn girdiBkt ilemleri iin )ld%ka ileri dil !"ellikleri k%llanlmasdr# $% !"ellikler arasnda sn+lar, tretilmi sn+lar, ilev bindirimi, sanal ilevler, )kl% kaltm ve kalplar er alr# $%ndan d)la C++ girdiBkt ilemlerini tam anlam ile kavra abilmek iin, )k&a C++ bilmek gereklidir# $alang )larak, girdilerde k%llanlan !in nesnesinin istream sn+, ktlarda k%llanlan !o%t nesnesinin ise, ostream sn+ nesnesi )ld%%n% belirtelim# C++ dilinde C dilinden +arkl )larak, girdiBkt ilemleri sn+lara aslanarak gelitirilmitir# 'rtk girdiBkt sn+larn %"%n %"%n in&elemenin "aman geldi# $! le&e b% sn+larn tasarm ve kt biemlerini !rene&ei"#

C++ da d)s a girdiBktlar da, !in ve !o%t nesnelerinin asland a n sn+ tanmlarn temel alrlar# <n&e girdi ve kt nedir kaba&a anlatalm# Si" bir sr )das ve kaplar )lan bir eve giri )rs%n%"# 3er )dann d!rt kaps )ls%n -) kadar kap )lma" a ne se anlalsn di e kab%l ap )r%"/# Si" bir )da a giri )rs%n%"# O an da si" ) )dann girdisisini"# =aha s)nra a n )dann baka bir kapsndan k )rs%n%"# O anda da si" a n )dann ktssn"# 'slnda a n )da, a n kii, +akat "aman iinde aplan e lem +arkl )ld%% iin girdi kt tanmlar +arklla )r# Si" eski )dadan eni bir )da a getiini"de artk eni )dann girdisisini"# 9ani b% d%r%mda birin&i )dann kts ikin&i )dann girdisi )l% )rs%n%"# 'slnda bilgisa arlardaki girdi kt kavramlarn da b% ekilde dnmelidir#

C++ girdi ve O3kt3 ar3 (inp%tJo%tp%t)


>as!a ben"eri )k sa da dil, girdiBkt ilemlerini d)r%dan dilin iine k) arlar# $% tr dillerde print ve a (rite ben"eri de imler, d)r%dan dilin anahtar kelimeleri arasnda er alr# CJC++ dilleri b! le deildir# 7erek C gerekse C++ dillerinin anahtar kelimelerine bakarsan", i#, #or vs## gibi kelimeler b%l%nmasna ramen, girdiBkt ilemleri ile ilgili bir anahtar kelime e rastla ama"sn"# C, aslnda girdiBkt ilemlerinin erine getirilmesini, derle i&i i k%llanana brakr# $%n%n bir nedeni* hede+lenen bilgisa arn d)nanmna en % g%n girdiBkt ilevlerinin tasarm iin, k%llanan !"gr brakmaktr# U g%lamada ise b k )%nl%k, aslnda WV;_ )rtam iin gelitirilen ktphane ilevlerinde er alan girdiBkt ilevlerini esas alr# MVS; C dilinin resmi et ka"anan b% girdiBkt paketi, Standart \irdiJ^3kt3 paketi )larak adlandrlr# C++ dili b% paketin kendi bn esinde de k%llanlmasna i"in verir# $! le&e C dilindeki stdio.h da eralan ilevler hakknda bilgi sahibi iseni", b%nlar C++ pr)gramlarnn iinde k%llanabilirsini"# C++ da b%nlar k%llanmak iin balk d)s asna !stdio eklemelisini"# - ani .in! %de -!stdio* / 3ere e ramen C++, girdiBkt ilemlerinde kendi !"mlerini C !"mlerine ter&ih eder# $% !"mlerde iostream ve #stream balk d)s alar ile tanmlanan sn+lar k%llanlr# Sn+ ktphanesi C++ resmi dil tanmnn bir paras deildir# Sade&e nesne !nelimli !"elliinden ka naklanan ve kab%l edilmi standart ktphanedir# C dili ile C++ dilini birbirinden a ran temel !"ellik b%d%r* C de s)r%n dile % ar, C++ da ise dil s)r%na % ar# C++ da !in ve istream anahtar kelimeler deildir# 3epsinden !te e C++ bilgisa ar pr)gramlama dili, sn+lar ve ben"eri %ns%rlarn nasl )l%t%r%la&ann k%rallarn k) ar# $% k%rallarn ardndan

nelerin aplmas la"m geldii ile %rama"# C ilevlerin standart ktphanesini, C++ ise sn+larn standart ktphanesini k%llanr# (imdi artk standart C++ girdiBkts iin, dn&e erevesi )l%t%r%p in&ele elim#

Mk32 ar (streams) ve Pampon ar (&%##ers)


C++ pr)gramlarnda girdi ve ktlar, ba tlarn akdr# 7irdide, pr)gram ba tlar girdi akndan elde eder# ktda ise pr)gram, ba tlar kt akna erletirir# Uetine !nelik bir pr)gramda, her ba t bir karakteri temsil eder# =aha genel bir de ile ba tlar, karakter ve a sa sal verinin iki tabanl sa larla g!sterimini salar# 7irdi akndaki ba tlar klav eden gelebildii gibi, herhangi bir bellek ara&ndan -hard disk gibi/, ve a baka bir pr)gramdan da gelebilir# -girdi kt anlatmnda %kardaki )dalar ben"etimini hatrla n/# $en"er ekilde, kt akndaki ba tlar da ekrana gittii gibi, a"& a, bir bellek ara&na ve a baka bir pr)grama da gidebilir# 'k, pr)gramla akn ka na, ve a akn var eri arasnda arab%l%&% gibi davranr# $% aklam C++ pr)gramlarnn, klav eden giren bilgi ile, d)s adan giren bilgi e de a n ekilde davranmasn salar# 9ani C++ pr)gram, ba tlarn akn ka nana bakmaks"n g!"!nne alr# 9ine ben"er ekilde, bir C++ pr)gram ba tlarn akn, vara&a ere bakmaks"n in&eler# O "aman girdi !netimi iki aamaldr* WWgirdi b%l%nd%ran ak pr)grama ilikilendirmek WWak d)s a a balamak $aka de ile bir girdi ak, herbiri bir %ta )lmak "ere, iki balant a gerek d% ar* d)s a % balants ve pr)gram % balants# =)s a % balants akn ka nan salar# Kr)gram % balants ise ak pr)grama b)altr# =)s a % balants d)s a )labile&ei gibi, bir arata )labilir, !rnek* klav e gibi# $en"er ekilde kt !netimi de, kt akn pr)grama balama , ve kt var erini akla ilikilendirme i kapsar# ' n shhi tesisat d"eni gibi, aln" b%rada s% erine ba tlar ak )r# 6amp)n k%llanarak girdiBkt ilemlerini gereklemek genellikle daha etkili )lmaktadr# 6amp)n b k bir bellek paras )l%p, bilginin bir aratan pr)grama ve a pr)gramdan bir ara&a aktarm srasnda k)la lk sala an, gei&i )larak k%llanlan saklama eridir# 6ipik )larak disk sr&s gibi aralar, bilgileri HDE ba tlk -ve a daha +a"la/ b klkler halinde aktarrlar# Kr)gramlarn bilgi i ilemleme b kl ise, her

se+erinde bir ba ttr# 8te tamp)nlar bilgi aktarmdaki b% +arkl h"lar, birbiri ile % %ml% hale getirirler# <rnek )larak hard diskteki et -\/ iaretlerini sa an bir pr)gram ele alalm# Kr)gram d)s adan bir karakter )k%r ilemler, d)s adan bir s)nraki karakteri )k%r ilemler, ve b% b! le srer gider# 3ard diskte er alan b% karakter iin her se+erinde d)s adan bir karakter )k%mak, )k +a"la d)nanm etkinlii gerektirir ve ava iler# 6amp)n aklamnda ise hard diskten b k bir alan t)ptan )k%n%r, daha s)nra b% )k%nan alan tamp)n da saklanr, ve s)nra tamp)n her se+erinde bir karakter )lmak "ere )k%n%r# $% ter&ihin nedeni* tamp)n bellekten )k%ma h"nn, hard diskten )k%ma h"na g!re )k +a"la )lmasdr# 3atrlatalm tamp)n bellek ]'U bellektir# 3ard diski ise bili )rs%n%"# 6abii tamp)n bellekteki bilginin s)n%na gelindiinde, pr)gram hard diskten bir s)nraki bellek alann )k%r# 6ekrar tamp)n bellee atar, b! le srer# $%, s% % b k bir dep)da -tamp)n/ t)pla p, daha s)nra h"la damlatarak -ba tlar tek tek )k%ma/ aktma a ben"er# ktlarda da ben"er ekilde pr)gram tamp)n% !n&e d)ld%r%r, daha s)nra tamp)ndaki verinin tamamn hard diske aktarr, ktnn bir s)nraki verisini aktarabilmek iin tamp)n silinir, bir s)nraki veri tamp)na erletirilir, ve b% b! le srer# $%na tamp)n%n d)ld%r%l%p b)altlmas denilir# Ne a si", tamp)n tahmil ve tahli esi de di ebilirsini"# Klav eden her se+erinde bir karakter girilebildiinden, klav e iin tamp)n gerekme"# :ira +arkl veri aktarm h"lar b%l%nmamaktadr# $%n%nla birlikte tamp)nlanm klav e girdisi, k%llan& a pr)grama g!nderilmeden !n&e girdinin k)r%nmas ve d"eltilebilmesi )lanan verir# $ir C++ pr)gram girdi tamp)n%n% enter t%%na basldnda d)ld%r%r, b% nedenle bilgisa arlarda klav eden girdi a"arken enter t%%na basn&a a kadar pr)gramda ilemleme aplma"# Tkrana kt g!nderebilmek iin de, C++ pr)gram tamp)nda eni satr karakterini -P/ g!rme i bekler# 6abii b%n% si"in g!ndermeni" gerekir# 7elmekte )lan girdi iin pr)gram % g%lama a bal )larak !n&eki girdi i b)altabilir# $aka bir de ile pr)grama girdi emri -bir girdi de imi ile/ verildiinde, ) anki ktsn herhangi bir kt tamp)n%na b)altr# $% bakmdan C++ pr)gramlar, 'ASO C dili ile t%tarllk iindedir# ;nl ema!s pr)gram tamp)n bellek k%llanmnn en g"el % g%lamalarndan biridir# Sma!s pr)gramnda birden +a"la % g%lama a n anda +arkl tamp)n belleklerde ileme tabi t%t%larak altrlabilir# 8sterseni" bir edit!r, isterseni" bir d)s a !neti&isi ve a bir pr)gram gelitirme )rtam )larak# ' r&a baka amalarla da k%llanabilirsini"# 6amp)n bellek k%llanm eterli ]'U belleini" varsa, )ld%ka h"l alan pr)gramlar gelitirmeni"i salar#

iostream dos"as3, ak32 ar ve tampon ar


'klar ve tamp)nlar !netmek pr)gram& iin bira" karmak bir itir# $% "den iostream d)s asnda b%l%nan, ilemleri bi"im adm"a gerekle en sn+lar k%llanlr# C++ dilinin s)n 7irdiBkt -OBO/ srmleri !har ve (!har$t verilerini destekle en sn+ kalplar tanmlamtr# $% kalplarn !"el !har % g%lamalar iinde, t"pede# sa esinde C++ klasik kalps" girdiBkt ilemleri gereklenebilir# $%nlarla ilgili sn+larn ba"lar aada verilmitir* 00stream&%# sn+ tamp)nlar iin bellek eri temin eder# stream&%# sn+ !ntemleri ile - ani ap& ilevleri ile/ tamp)nlar d)ld%r%l%r, tamp)n ieriklerine eriilir, tamp)n b)altlr ve tamp)n bellekler !netilir# 00ios$&ase sn+ akn genel !"elliklerini temsil eder# 'kn )k%mak iin ak )l%p )lmad ve metin a da sa sal ak )l%p )lmad h%s%slar gibi# 00ios sn+ ios$&ase sn+n da anr ani d)r%dan )ndan tretilir# ios sn+nda, stream&%# nesnesine g!sterge e b%l%n%r# 7irdi ve kt ilemlerini gerekle en 7B ktphanesinin her sn+, ios sn+ndan tretilmi ve eteneklerini )ndan almtr -d)la s ile ios$&ase sn+ndan/# ios sn+nn !nemli bir ilevi de aklar tara+ndan k%llanlan tamp)nla iletiimi tanmlamaktr# 6amp)n stream&%# nesnesidir -ve a stream&%# sn+ndan tretilmitir/ # 'sl, girdi ve -ve a/ ktdan s)r%ml% )lan )d%r# $%n%n anlam* iostream nesneleri girdi ve kt ilemlerini kendileri gerekleme" demektir# 'nlan ilemler ilgili tamp)n nesnelerine braklmtr# Ok% %&% b% b!lm )k%rken b%nlar aklndan karmamamldr# 00ostream sn+ ios sn+ndan tretilmitir# kt !ntemlerini - ani ap& ilevlerini/ b%l%nd%r%r# 00istream sn+ da ios sn+ndan tretilmitir# 7irdi !ntemlerini b%l%nd%r%r# W0iostream sn+ hem istream hem de ostream sn+ndan tretilmitir#

9ani )kl% kaltm !rneidir# $% "den girdiBkt !ntemlerini tretir# $% k)la lklarn k%llanlabilmesi iin % g%n sn+ nesneleri )l%t%r%lmaldr# <rnek )larak* kt !netmek iin ostream sn+ nesnesi !o%t k%llanlmas gibi# $! le bir nesne )l%%m% ile ak alr, )t)matik )larak tamp)n )l%%r ve )n% akla ilikilendirir# ' r&a sn+ e ilevleri de hi"met verme e ha"rdr# <rnekC !o%t--?`k% arda?--ta e&e--?&% %nmaktaEn? / 9%kardaki !rnekte derle i&i, Xta e&e[ deikeninin tipini saptar ve deerini !o%t iostream,inde, &mlenin % g%n erine erletirir# $en"er s)n%&% C dilinde elde etmek istersek, print#( ) ilevi k%llanlr# 8lev deikenlerinin belirtilen tipleri ile, a n !enin ileve g!nderilen tipi arasnda % %ms%"l%k )ld%% takdirde, derle i&i si"i % armaktan baka bir i apma"# 9ani C dilinde tip gvenlii tam )larak salanamamtr# C++ dilinde ise salanan tip gvenlii sa esinde, tip % %ms%"l%% batan engellenmitir# iostream ktphanesinde ak nesneleri snrl bir r)le sahiptir# $%nlar bir andan, girdi ve a kt nesneleri arasnda ara " )l%t%r%rken, !te andan stream&%#, aralara asl girdi ve ktlar s)r%ml%s% )larak ilk admda stream&%# nesnesini )l%t%rm%t%# $% aklam eni bir ara eidi iin eni bir eit stream&%# )l%t%rmak ama& ile stream&%# eski i i d)stlar istream ve a ostream sn+lar ile birlikte k%llanlr# $%rada kavranmas gereken en !nemli e * iostream nesnelerinin biemleme etenei ile, bir ara iin stream&%# ta gereklenen tamp)nlama ara " arasndaki +arktr# 9eni aralara ara " )l%t%r%rken -s)ket ve a d)s a belirteleri gibi/ +arkl bir stream&%# inaas gerekir, ama eni bir istream ve a ostream nesnesi gerekme"# Kapla & -(rapper &lass/bir sn+ istream ve a ostream sn+lar etra+nda ina edilebilir, ama sade&e belli bir ara&a k)la lkla eriebilmek ama& ile# Stringstream sn+larnn ina edilme biimleri b%nlard#

i)sSbase

^;BP; \][U]
i)s rdb%+- / streamb%+W

streamb%+W istream +ileb%+W stringb%+W )stream

i+stream

istringstream

)+stream

)stringstream

i)stream

ze &a2 3k dos"a ar3


iostream ktphanesinde )k sa da !"el balk d)s as tanmlanmtr# K)%llara bal )larak aadaki balk d)s alar pr)gramlarn"a eklenebilir# WW.in! %de -ios#(d* C iostream sn+lar iin !n&eden bildirim gerektii "aman b% !nilemle i&i !nergesi k%llanlmaldr# <rnek )larak bir ilev ostream e bir da an deikeni tanmlarsa, ilev kendini bildirirken, derle i&i ostream in ne )ld%%n% tam )larak bilmesi gerekme"# $alk d)s asnda b! le bir ilevin bildiriminde, ostream sn+nn sade&e bildirimi gerekir# 'ma aadaki a"m k%llanma"sn"* ! ass ostream / BBhatal bildirim void &ir#%n!(ostream 6str) / $%nlarn erine* .in! %de -ios#(d* BBd)r% bildirilmi )stream void &ir#%n!(ostream 6str) / k%llanlmaldr# WW.in! %de -stream&%#* C stream&%# ve #i e&%# sn+lar k%llanlrken b% !nilemle i&i !nergesi a"lr# WW.in! %de -istream* H istream sn+lar k%llanrken ve a hem girdi hem de kt gerekle en sn+lar k%llanrken la"m )l%r# WW.in! %de -ostream* H ostream sn+lar k%llanlrken b% !nilemle i&i !nergesi gerekir ve a, hem girdi hem de kt gerekle en sn+larla k%llanlr# WW.in! %de -iostream* H gl)bal ak nesneleri -!in, !o%t ben"eri/ k%llanlrken b% !nilemle i&i !nergesi gerekir# WW.in! %de -#stream* H d)s a ak sn+lar k%llanlrken gereken !nilemle i&i !nergesidir#

WW.in! %de -sstream* H string ak sn+lar k%llanlrken gereken !nilemle i&i !nergesi# WW^in! %de -iomanip* H deerleri belirlenmi !"elletiri&ilerin k%llanld "aman gereken !nilemle i&i !nergesi#

Mna s3n3#H ios$&ase


$tn girdiBkt ilemlerinin temelini ios$&ase sn+ )l%t%r%r# 7B aklarnn d%r%m%n% denetlemek ve kt biemlerini d"enlemek, )n%n tanmladklar arasnda er alr# 7B ktphanesinin her ak sn+, ios sn+ ara&l ile b% sn+tan tretilir ve etenekleri aktarlr# ios$&ase sn+ C++ dilinde ina edilen btn 7B larn temeli )lan sn+tr, b%ndan d)la )n% C++ 7B ktphanesinin ilk sn+ )larak ele ala&a"# $%rada ine belirtelim* C de )ld%% gibi C++ da da 7B sn+, dilin resmi paras deildir -C++ da 'ASOBOSO standart )lmasna ramen/# 'slnda !ntanml )larak verilen btn 7B ktphaneleri teknik )larak g!"ard edilebilir, ama kimse b%n% apma", belirtilen 7B ktphanesi C++ da de +akt) 7B standart )lm%t%r# $%rada hemen bir e i daha akla alm* iostream sn+lar girdi ve ktlar kendileri gerekleme", b% iler iin ardm& bir sn+ g!revlendirir, ani stream&%# ile )ndan tretilenleri# 'klamalarm" tamamlamak iin %n% da ekle elim* ios$&ase nesnesini d)r%dan ina etmek mmkn deildir# ios$&ase nesneleri ios$&ase sn+ndan tretilen sn+lar ara&l ile ina edilir# -ios$&aseHHios$&ase ap& ilevlerini k%llanarak/# iostream hi erarisinde eralan bir s)nraki sn+ ios sn+dr# 'k -stream/ sn+lar ios sn+ndan tretildii iin -d)la s ile ios$&ase den/ % g%lamada ios ile ios$&ase arasndaki +ark kavramak ha ati !nemdedir# $%ndan d)la , aslnda ios$&ase tara+ndan salanan k)la lklar ios sn+ k)la lklar )larak in&elene&ektir#

stream&%# nesne erin ara"zH ios s3n3#3


ios sn+ d)r%dan ios$&ase sn+ndan tretilir# Ne C++ dilinin btn 7B ak sn+larnn -stream sn+lar/ alt apsn tanmlar# ios sn+ nesneleri d)r%dan )l%t%r%labilmelerine ramen, hemen hemen hi % g%lanmamtr# ios sn+nn ama&* &asi!$ios sn+nn k)la lklar ile beraber bir)k eni k)la lk ekle erek, ios sn+ nesneleri tara+ndan !netilen stream&%# nesnelerinin !netimini salamaktr# Salanan

k)la lklarn tamam stream&%# !netimi ile ilgilidir# <br ak sn+larnn tamam, a d)r%dan a da d)la l )larak ios sn+ndan tretilir# $%n%n anlam* ios ve ios$&ase sn+lar tara+ndan salanan k)la lklarn hepsi, !br btn ak sn+lar iin de geerlidir demektir# (imdi ios sn+nn salad k)la lklar ele alalm# ios sn+ )k sa da e ileve sahiptir# $%nlarn bir)% biemle ilgilidir# =ier a gn k%llanlan e ilevleri verelimC stream&%# 0iosHHrd&%#( ) / $% e ilev, ios nesnesi ile ara arasnda ara " )l%t%ran stream&%# nesnesine g!sterge geri d!ndrr# $%radaki ara ios nesnesi ile iletiimdedir# stream&%# 0iosHHrd&%#(stream&%# 0ne() / $% e ilev ios nesnesini ikin&i bir stream&%# nesnesi ile ilikilendirmek ama& ile k%llanlr# ios nesnesinin ana stream&%# nesnesine bir g!sterge d!ndrlr# $% g!sterge&in g!sterdii nesne, ak nesnesi g!rnt dna kt "aman silinme", ) "aman sahibi rd&%#( ) ilevini arandr# ostream 0iosHHtie( ) / $% e ilev ios nesnesine balanan ostream nesnesine g!sterge geri dndrr# =!nen ostream nesnesi, tie( ) e ilevin arld ios nesnesine her bilgi giriinden ve a kndan !n&e b)altlr# @ -s+r/ d!n deeri ios nesnesine hen" ostream nesnesi balanmadn g!sterir# ostream 0iosHHtie(ostream 0ne() / $% e ilev ile bir ios nesnesi ikin&i bir ostream nesnesi ile ilikilendirilir# ios nesnesinin ana ostream nesnesine g!sterge d!ndrlr#

Bo2% ar
K)%l, kendinden &oo deeri retilen pr)gram aklamas demektir# 'klar "erinde aplan ilemler bir)k nedenle baarl )lama abilirler# 'ktaki ilem baarl )lmad "aman, devam eden )k%ma ve a"malar m%allakta kalr# 'kn k)%l d%r%mlarn bir pr)gramla in&elemek )lasdr, b! le&e gereken tamirat aplr ve pr)gram terkedilmemi )l%r# K)%llar

aadaki k)%l ba raklar ile temsil edilirler* iosHH&ad&it H $% ba rak kseldiinde, ak ara "lerine stream&%# sevi esinde % g%ns%" bir ilemin istendii anlalr# iosHHeo#&it H $% ba rak )rta a kt "aman, ios nesnesi d)s a s)n%na gelindiini anlar# iosHH#ai &it H $% ba rak ak nesnesi tara+ndan gereklenen ilemin baars" )ld%%n% g!sterir# $% d%r%mda ak, kendinden istenen g!revi erine getirememi demektir# iosHHgood&it H $% ba rak kseldiinde !br ba rak inmi demektir# ios nesnelerinin d%r%mlarn belirlemek ve a deitirmek iin )k sa da k)%l e ilevleri b%l%nmaktadr#$%nlar* iosHH&ad( ) H iosHH&ad&it deeri D -bir/ )ld%%nda b% e ilev D -d)r%.tr%e/ d!ndrr, aksi d%r%mda @ - anl.+alse/ d!ndrr# Ter d)r% -tr%e/ d!ndrlmse ak ara "lerine stream&%# nesne sevi esinde % g%ns%" bir ilemin istendiini g!sterir# Keki b%n%n anlam neQ# stream&%# kendinden beklenme en ekilde davrand demektir# <rnee bakalm* ostreamHHerror(7) / <rnekte ostream nesnesi stream&%# nesnesi ile allmadan )l%t%r%lm%t%r# stream&%# hibir "aman d)r% almadnda )n%n iosHH&ad&it i en batan kseltilir, b! le&e error.&ad( ) D -.tr%e/ d!ndrr# iosHHeo#( ) =)s a s)n% algland "aman - ani iosHHeo#&it kseldiinde/ b% e ilev D -tr%e/ d!ndrr, aksi d%r%mda @ -+alse/ d!ndrr#

iosHH#ai ( ) H $% e ilev iosHHeo#( ) ve a iosHH&ad( ) D -tr%e/ d!ndrd "aman, D -tr%e/ d!ndrr# 'ksi d%r%mda ise @ -+alse/ d!ndrr# iosHHgood( ) H $% e ilev iosHHgood&it ba rak deerini d!ndrr# <br k)%l ba raklarnn hibiri -iosHH&ad&it, iosHHeo#&it, iosHH#ai &it / kselmediinde b% D -tr%e/ d!ndrr# 'adaki basit !rnee bakalm* .in! %de -iostream* .in! %de -string* %sing namespa!e std / void d%r%m( )< !o%t--?E? =BadH =--!in.&ad( )--? = =aai H =--!in.#ai ( )--? = =So#H =--!in.eo#( )--? = =\oodH =--!in.good( )--end / I int main( )< string satir / int ' / !in**' / d%r%m( ) / !in.! ear( ) / get ine(!in, satir) / d%r%m( ) / get ine(!in, satir) / d%r%m( ) / IJJJHK $% pr)gram iki satrdan )l%an bir d)s a ilemlediinde, -!rnekC hell) _)rld/ ve ikin&i satr Pn ile s)nlanmad "aman, aadaki s)n%lar elede edilir* $adC@ YailCD T)+C@ 7))dC@ $adC@ YailC@ T)+C@ 7))dCD $adC@ YailC@ T)+CD 7))dC@ $! le&e Z girii !n&e )lma" -g))d- / @ d!ndrr/, daha s)nra hata d%r%m% silinir ve ilk satr baarl bir biimde )k%n%r -g))d- / D d!ndrr/# S)n

)larak ikin&i satr )k%n%r -tamamlanmadan/Cg))d- / @ d!ndrr, ve e)+- / D d!ndrr# WW'klarn b))l deerleri )larak )r%mlanmasC 'klar beklentileri b))l deeri )lan aklamalarda k%llanlabilir# <rnekC i#(!in) BB&in kendini b%rada b))l deeri )larak )r%mlamtr# i#(!in**') BB&in giriinden s)nra b))l deeri )larak )r%mlanmtr# i#(get ine(!in, str) BBgetline &in d!ndrr $ir ak b))l, ani mantk deeri )larak )r%mland "aman, aslnda not iosHH#ai ( ) )larak )r%mlanm demektir# O "aman %kardaki !rnekleri aadaki ekilde eniden a"mak mmkndrC i#(not !in.#ai ( )) i#(not (!in**').#ai ( )) i#(not get ine(!in, str).#ai ( )) 'adaki e ilevler ise hatal d%r%mlar !netirler# iosHH! ear( ) 3atal bir d%r%m )rta a ktnda, b% d%r%m d"eltilebilir, b% "den d)s ann hatal hali ! ear( ) ilevi arlarak temi"lenebilir# $indirilmi srm, d%r%m ba raklarn ilemle ebilir, ani ba raklarn ) anki d%r%mlarn !n&e silinir s)nra d)r% deerleri erletirilirC iosHH! ear(int state) iosHHrdstate( ) $% e ilev bir ios nesnesinin ) anki ba raklarn geri d!ndrr# $elli bir ba ra snamak iin iki&il Ne -bit_ise 'nd/ k%llanlrC i#(ios`&Qe!t.rdstate( ) 6 iosHHgood)< BBd%r%m i i I iosHHsetstate(int # ags)H $% e ilev belli ba raklarn deerini D apmak iin k%llanlr# $ilindii gibi iosHH! ear( ) btn ba rak deerlerini siler ani @ -s+r/

apar# 6abii ba raklarn s+rlanmas hatann da )t)matik silinmesi anlamn tama"# $%n%n iin takip edilmesi gereken )lC ??hatal d%r%m alglanmal ??hata d"eltilmeli ??iosHH! ear( ) arlmal C++ dilinde istisnai d%r%mlar !netmek iin istisna mekani"mas b%l%nmaktadr# 8stisnalar 'ASOBOSO standartlarna g!re ak nesneleri ile k%llanlabilir# $% k)n%n%n a rntlar istisnalar b!lmnde verile&ektir#

\irdi ve ^3kt3n3n &iOim endiri mesi


$ilginin aka a"m -ve a aktan )k%ma/ d"eni biimlendirme ba raklar tara+ndan belirlenir# $iimlendirme, kt alannn ve a girdi tamp)n%n%n geniliini denetlemek gerektiinde k%llanlr# $iimlendirme g!sterile&ek deerin g!sterilme biimini belirlemekte de k%llanlabilir -n)ktadan s)nra ka hane rakam k%llanla&a gibi/# $iimlendirmenin b k )%nl%% kt aklar ile k%llanlmasna ramen, % g%lanmas b k )randa ios sn+na aittir# $iimlendirme ios sn+ tara+ndan tanmlanan ba raklar tara+ndan d"enlendii iin, )n% ios sn+nn kendisi ile in&elemek en i i )ld%r# $iimlendirme, biimlendirme ba raklar ile d"enlenir# $% ba raklar iki )lla deitirilebilirC !"el e ilevler k%llanarak ve a d)r%dan ak iine !"elletiri&iler -manip%lat)rs/ erletirerek# <"elletiri&iler d)r%dan ios sn+na % g%lanma", erletirme ile&i k%llanm la"mdr# $ira"dan a rntlar vere&ei"#

BiOim endirme &a"rak ar3


$iimlendirme ba raklarnn b k )%nl%% bilginin kt a g!nderilmesi ile ilgilidir# $ilgi kt aklarna iki trl a"labilir* ikili -binar / kt bilgi i d)r%dan kt akna a"ar, b% tr insan tara+ndan )k%nabilir bir biem -+)rmat/ deildir# <rnek )larak int deerinin G b te )larak a"lmas gibi# 8kin&i tr )larakta insanlarn )k% abilmesi iin biimlendirilmi kt, bilgisa ar belleinde b te halinde b%l%nan deerleri 'SCOO k)dlara evirir# $iimlendirme ba raklar b% evrim biimlerini d"enle ebilir# <rnek )larak kt akna a"drla&ak karakter sa sn dentlemek gibi# (imdi aadaki biimlendirme ba raklarn in&ele elimC

iosHHadQ%st#ie d H $a rak d"enleme ile k%llanlan maske deeri, geni alanda deerlerin a arlama biimini tanmlar# (iosHH e#t, osHHright, iosHHinterna )# <rnek* D@ karakterli alanda D@ deerini s)la g!re d"enlemeC !o%t.set#(iosHH e#t, iosHHadQ%st#ie d) / !o%t--?)?--set((17)--17--?)?--end / iosHH&ase#ie d $a rak d"enleme ile k%llanlan maske deeri kt a g!nderilen int sa nn k%llanla&a sa tabann belirler# (iosHHde!, iosHHhe', iosHHo!t). <rnek HH@@@ sa snn heZ biiminde a"lmas* !o%t.set#(iosHHhe', iosHH&ase#ie d) / !o%t--99777--end / BBve a !"elletiri&i k%llanalmC !o%t--he'--99777--end / iosHH&oo a pha $))l deerleri metin )larak g!stermek ama& ile k%llanlr# $% ilem anl mantk deerleri iin ,#a se,, d)r% mantk deerleri iin )tr%e) metinlerinin a"lmas demektir# Narsa m )larak b% ba rak a arlanma"# Karlk gelen !"elletiri&iler* &oo a pha ve no&oo a pha# <rnek )larak b))l deerini D erine ,tr%e, a"dralmC !o%t--&oo apha--(1,,1)--end / iosHHde! Sa lar D@ tabanna g!re )k% %p a"ma salar# $% varsa m )larak her "aman b%l%n%r# set# ile birlikte iosHH&ase#ie d maske deeri m%tlaka salanmaldr# Karlk gelen !"elletiri&i* de!# iosHH#i'ed $ilimsel a"mlarn tersine sa lar sabit bir g!sterimle belirtir# <rnek* DE#FG# Ter g!sterimde bir deiiklik istenirse set#( ) ilevi ile k%llanld "aman m%tlaka iosHH# oat#ie d maske deeri )lmaldr# <rnek )larak aadaki iosHHs!ienti#i! bakn"# iosHH#i'ed in baka bir k%llanm, a"drlan # oat ve do%& e sa larn n)ktadan s)nraki hane sa sn belirlemektir# 'adaki iosHHpre!ision a

bakn"# iosHH# oat#ie d $a rakla birlikte k%llanlan maske deeri g!sterile&ek gerek sa lar d"enler -iosHH#i'ed, iosHHs!ienti#i!/# <rnek* !o%t.set#(iosHH#i'ed, iosHH# oat#ie d) / iosHHhe'H Sa lar heZ -D> tabanna g!re/ )larak )k% %p a"ma d"enler# set#( ) ilevi ile birlikte m%tlaka iosHH&ase#ie d maske deeri salanmaldr# Karlk gelen !"elletiri&i* he'# iosHHinterna H Aegati+ sa larn eksi iareti ile sa nn kendisi arasna d)ld%r%&% karakterler ekler# -varsa m )larak b%ras b)t%r/# set#( ) ilevi ile birlikte m%tlaka adQ%st#ie d maske deeri salanmaldr# Karlk gelen !"elletiri&i* interna . iosHH e#tH =eerleri g!sterirken alanlar gerekenden +a"la )ld%%nda s)la aslama# Narsa m ise saa aslar# set#( ) ilevi ile birlikte adQ%st#ie d maske deeri m%tlaka temin edilmelidir# Karlk gelen !"elletiri&i* e#t# iosHHo!tH Sa lar )ktal )larak -` tabanna g!re/ g!stermek iindir# set#( ) ilevi ile birlikte ise m%tlaka iosHH&ase#ie d salanmaldr# Karlk gelen !"elletiri&i* o!t# iosHHrightC =eerleri g!sterirken alanlar gerekenden +a"la )ld%%nda saa aslama# $% a ar varsa m )larak kab%l edilir# set#( ) ilevi ile birlikte iken adQ%st#ie d maske deeri m%tlaka salanmaldr# Karlk gelen !"elletiri&i* right# iosHHs!ienti#i!H 7erek deerleri bilimsel biimde -!rnekC D#EF+e@E/ g!stermek iin k%llanlr# set#( ) ilevi ile birlikte iken # oat#ie d maske deeri m%tlaka

temin edilmelidir# Karlk gelen !"elletiri&i* s!ienti#i!. iosHHsho(&aseH Sa larn belirtildii taban deerleri g!sterir# 3eksadesimal tabanlarda @Z !neki, )ktal tabanlarda O !neki k%llanlr# Narsa m )ld%% iin )n tabanl sa larda herhangi bir !nek k%llanlma"# Karlk gelen !"elletiri&iler* sho(&ase ve nosho(&ase dir# iosHHsho(pointH 7erek sa lar g!sterilirken )ndalk n)ktasn ve takip eden s+rlar belirtir# $% ba rak D apld "aman, bir kt* !o%t--19.7--?, =--19.1--?, =--19--end / s)n%C DH#@@@@ DH#D@@@ DH S)n sa gerek sa dan "i ade bir int tiptir, )ndalk n)ktas g!sterilmemitir# $%ndan d)la iosHHsho(point etkisi )lma"# iosHHsho(point k%llanlma"sa takip eden s+rlar )t)matik )larak g!" ard edilir# Karlk gelen !"elletiri&i* sho(point. iosHHsho(posH K)"iti+ sa larda + iaretinin g!sterilmesini salar# Karlk gelen !"elletiri&i* sho(pos. iosHHskip(sH 'klardan bilgi elde edilmesi iin k%llanlr# $% ba rak D )ld%% "aman -varsa lan b%d%r/ !ndeki b)l%klar -blanks, ne_lines, tabs vs/ aktan bir deer elde edilene kadar atlanr# $a rak eer D deilse ) "aman b% be a" b)l%klar atlanma"# iosHH%nit&%#H 3er kt ileminden s)nra ak eniden d)lmas iin b)altmak# iosHH%pper!aseH =eerleri b k har+lerle g!stermek -3eZ ve a bilimsel biimli )lanlarda/

BiOem deGi2tiren "e i2 ev er


7B lar biimlendirmek )k sa da e ilev b%l%nmaktadr# )% kere de b%nlara karlk gelen !"elletiri&iler vardr# 9erletirme ve elde etme ileleri k%llanlarak d)r%dan aklara erletirme ve a aklardan elde etme gerekletirilir# $%nlar daha ileride anlatla&ak# ; e ilevler* iosHH!op"#mt(ios 6o&Q)H $% e ilev btn biem tanmlarn o&Q dan ) anki ios nesnesine k)p alar# iosHH#i ( ) !onstH O anki d)ld%rma karakterini !har )larak d!ndrr# Narsa lan ise b)l%kt%r# iosHH#i (!har padding)H =)ld%rma karakterini eniden tanmlar# $ir !n&eki d)ld%rma karakterini !har )larak d!ndrr# Karlk gelen !"elletiri&i* set#i ( ). iosHH# ags( ) !onstH arlan e ilevin, ak biem d%r%mlarn denetle en ) an ki ba raklarn d!ndrr# $elli bir ba ra in&elemek iin ikili sa sistemi ve ileler k%llanlmaldr# <rnek* i#(!o%t.# ags( ) 6 iosHHhe')< BBheZ kt sa lar I iosHH# ags(#mt# ags # agset)H <n&eki ba raklar d!ndrr ve ) anki ba raklar # agset )larak tanmlar# $%nlar iki tabanl sa lar ve ilelerle birletirilmi )l%p biimlendirme ba raklarn&a tanmlanmlardr# $%rada hemen %n% belirtelim* b% e ilevi k%llanarak ba raklar d"enlemek iin, !n&eki ba rak deerlerinin )rtadan kaldrlmas gerekir# <rnek )larak b% e ilevi, !o%t nesnesinde )n tabanl sa dan )nalt tabanl sa a evriminde k%llanalm* !o%t.# ags(iosHHhe' Z #isHH# ags( ) 6 KiosHHde!) / Ne a aadaki seeneklerden herhangi bir )labilir*

!o%t.set#(iosHHhe', iosHH&ase#ie d) / !o%t--he' / iosHHpre!ision( ) !onstC 7erek sa deerini kt a g!nderebilmek iin sa da er alan rakam sa sn -varsa lan >/ d!ndrr# -int )larak/# iosHHpre!ision(int signi#)H 7erek sa deerini kt a g!nderebilmek iin sa da er alan rakam sa sn eniden tanmlar ve !n&eki sa da er alan rakam sa sn d!ndrr# -int )larak/# Karlk gelen !"elletiri&i* setpre!ision( )# <rnek* )n tabanl sa n)ktadan s)nra hep G haneli )larak )larak a"drmak# !o%t.set#(iosH.#i'ed) / !o%t.pre!ision(8) / !o%t--8.7--? =--8.71--? =--8.771--? =--8.7771--end / !o%t--8.77779--? =--8.7777:--? =--8.7777F--end / G#@@@@H sa s G#@@@D sa sna %varlanr# ' n ekilde ?G#@@@@H sa s da ?G#@@@D sa sna %varlanr# iosHHset#(#mt# ags # ags)H $ir !n&eki ba raklarn hepsini d!ndrr ve bir ve a daha +a"la ba ra belirler# -ilgili ba raklar bit d"enli a - / ileler ile birara a getirilir, dier ba raklar etkilenme"/# Karlk gelen !"elletiri&iler* setios# ags ve a resetios# ags. iosHHset#(#mt# ags # ags, #mt# ags mask) / <n&eki btn ba raklar d!ndrr, mask deikenindeki ba raklar siler ve # ags te belirtilenleri ise d"enler# Tn i i bilinen mask deerleri* iosHHadQ%st#ie d, iosHH&ase#ie d ve iosHH# oat#ie d tir# <rnek* set#(iosHH e#t, iosHHadQ%st#ie d) kendi b!lgelerinde s)la asl geni deerlerde k%llanlr# -iosHHright ve iosHHinterna baka seenekler )larak k%llanlabilir#/ set#(iosHHhe', iosHH&ase#ie d) sa larn )nalt -he'/ tabanna g!re g!sterimi salanr# -iosHHde! ve iosHHo!t dier seenekler )labilir#/ set#(iosHH#i'ed, iosHH&ase#ie d) gerek sa larn sabit sa da )ndalkla

a"lmasn salar# -iosHHs!ienti#i! baka bir seenektir#/ iosHH%nset#(#mt# ags # ags) C <n&eki ba raklarn tmn d!ndrr, belirli ba raklar siler ve geri kalanlar deitirmeden brakr# Narsa lan etkin ba ran deerinin d"enlenmemesi herhangi etki )l%t%rma"# 9ani !rnek* !o%t.%nset#(iosHHde!)# iosHH(idth( ) !onst C O anki kt alan geniliini int )larak d!ndrr# Narsa lan * @, ani deeri a"mak iin gerektii kadar karakter anlamn tar# Karlk gelen !"elletiri&i* set(( )# iosHH(idth(int n!hars) H $ir !n&e k%llanlan kt alan geniliini int )larak d!ndrr# $ir s)nraki kt ilemi iin n!har a deeri eniden tanmlar# 3er kt ileminden s)nra alan genilii @ a a arlanr ve (idth( ) ilevinin !har0 ve a string metinlerde herhangi bir etkisi )lma"# Karlk gelen !"elletiri&i* set((int)#

^;BP;
C++ kts temelde ostream sn+na da anr# ostream sn+ bilgi i aka erletirmek iin gereken ile ve eleri tanmlar* erletirme ile&i -44/ ve ostreamHH(rite( ) gibi !"el eler ile aklardan biimlenmemi bilgi i a"drmak iin k%llanlrlar# ostream sn+ndan )k sa da baka sn+ tretilir* b% sn+lar kendi !"ellikleri ile birlikte ostream sn+nn ilevikliini de tarlar# kt "erine )lan, bir s)nraki b!lmde* ostream sn+nn kt iin salad k)la lklar# ostream sn+nn a"mak iin d)s a amas# -C deki #open(#i ename, =(?) ile karlatrlabilir/ ostringstream sn+nn d)s a -aklar/ erine bilgi i bellee a"mas# -C deki sprint#( ) ilevi ile karlatrlabilir/# 'nlatla&ktr#

Mna O3kt3H ostream


6emel kt aralarn tanmla an sn+ ostream sn+dr# !o%t, !err ve ! og

nesneleri hep ostream sn+nn nesneleridir# $%rada hemen belirtelim* kaltm d)la s ile kt ile ilgili ios sn+nda tanmlanm ne kadar k)la lk varsa, a nen ostream sn+nda da b%l%n%r# Ostream nesnelerini aadaki ostream ap& ilevi ile )l%t%rabiliri"* ostream o&Qe!t(stream&%#0 s&) / $% ap& ilev !n&eden var)lan bir d)s a a ara " )labile&ek, var )lan stream&%# etra+nda !rt& -(rapper/ ina etmek iin k%llanlabilir# $%radan )rta a kan* basit bir )stream nesnesinin ina edilmesi mmkn deildir# !o%t ve a )n%n ben"erleri k%llanld "aman, aslnda bi"im iin )l%t%r%lm% )lan !ntanml ostream nesnesini k%llan )r%", ani asl ara "n stream&%# -!ntanml/ nesnesini k%llanan -!rnek )larak/ standart kt aknn ara "# C++ da ostream sn+n k%llanmak iin .in! %de -ostream* !nilemle i&i !nergesi m%tlaka pr)grama eklenmelidir# <ntanml ostream nesnelerini k%llanmak iin ise, .in! %de -iostream* !nilemle i&i !nergesi m%tlaka ilave edilmelidir#

ostream nesne erine "az3m


ostream sn+ hem biimlenmi, hem de iki&i -binar / kt d"enlerini destekler# 9erletirme ile&i -44/ ostream nesnesine deerleri tip gven&esinde erletirir# $iimlenmi kt* bilgisa ar belleinde b%l%nan iki&i d"endeki deerlerin, belli biimleme k%rallarna % arak insann )k% abile&ei 'SCOO k)dlarna evrilmesidir# 9erletirme ile&i -44/ erletirile&ek )lan bilgi i ostream nesnesine iaret eder# 8le&in -44/ balants her halkarda deimeden kalr# 'adaki bir de imle karlalrsa* !o%t--?merha&a?--?d%n"a? / !n&e en s)ldaki iki !e -!o%t--?merha&a?/ ilemlenir, ve ostream 6o&Qe!t ani asl !o%t nesnesi geri d!ner, artk imdi de im !o%t--?d%n"a? / a indirgenmi )l%r ve ikin&i string te -d%n"a/ kt a g!nderilir#

-44/ ile&inin )k sa da bindirilmi eidi b%l%n%r# $% sa ede )k sa da deiken tipi -int, !har, string, do%& e v#s#/ ostream nesnesine g!nderilebilir# 'adaki ostream nesne e ilevleri ikili -binar / d)s alar a"makta k%llanlabilir* ostream6 ostreamHHp%t(!har !)H $% e ilev kt akna tek bir karakter a"ar# $% karakter bir ba t )ld%% iin b% e ilev a r&a b% karakteri metin d)s asna a"mda da k%llanlabilir# ostream6 ostreamHH(rite(!har !onst0 &%##er, int ength) C $% e ilev !har !onst0 &%##er da sakl en )k en ba t a"ar, a n tamp)nda sakl )ld%klar ekilde biem deiiklii )lmadan a"lr# 9a"m biiminden g!re&eini" gibi ilk deiken !har !onst0, b% "den !teki tiplerde a"m iin tip d!km gerekir# <rnek )larak int deikeni ba t deerlerin biemsi" d"eninde a"arsak* int i / o%t.(rite(reinterpret$!ast-!har !onst0*(6i), sizeo#(int)) /

ostream "er e2im dzen eme


9eniden erleimi her ostream nesnesi d"enlememesine ramen, )% b% ii apar# $%n%n anlam* daha !n&eden a"lm )lan akn bir b!lm eniden a"labilir# Neritabanndaki veri e geliig"el erimek me&b%ri eti ")r%nl% )ld%% erlerde, eniden erleim d"enleme veritabanlarnda sklkla k%llanlr# 'adaki eler erlaim d"enlemelerde k%llanlr* pos$t"pe ostreamHHte p( )H $% ilev ) an b%l%n%lan eri -m%tlak/ d!ndrr, aka a"la&ak bir s)nraki erde )rta a kar# U g%lamada pos$t"pe, %nsigned ong )larak dnlebilir# ostream6 ostreamHHseekp(o##$t"pe step, iosHHseekdir org) H $% e ilevi akn erleimini eniden d"enlemek iin k%llanabiliri"# 8lev org tan gide&ek )lan ba tlar halindeki adm b kln, ani bir o##$t"pe step bekler# )++St pe pratikte l)ng )larak alnabilir# step in

ka na )lan )rg, i)sCCseekdir deeridir# Olas deerleri ise aada verilmitir* iosHH&eg C org akn balang&na g!re adm b kl )larak )r%mlanr# org belirlenmemise iosHH&eg k%llanlr# iosHH!%r C org ) anki ere g!re -akn te p( ) ilevi tara+ndan d!ndrlr/ adm b kl )larak )r%mlanr# iosHHend C org akn ) an ki s)n erine g!re adm b kl )larak )r%mlanr# =)s a s)n%n%n !tesi de aranabilir# S`a tan !te e ba t a"mak 'SCOO?: deerlerin erletirilmesine )laarC b) ba tlar -n%ll?b tes/# =)s a bandan !n&e arama apma a i"in verilme"# iosHH&eg ten !n&e arama aplrsa iosHH#ai ba ra D )l%r#

ostream &o2a tma


iosHH%nit&%# ba ra D deilse ostream nesnesine a"l bilgi +i"iki aka hemen a"lma"# 9a"ma ilemleri daha "i ade i tamp)na aplr, b% da d)ld%% "aman b)altlr# 8 tamp)n pr)gram denetiminde b)altlr# ostream6 ostreamHH# %sh( ) H $% e ilev tamp)ndaki bilgi i ostream nesnesine a"ar# # %sh( ) ilevi ??ka s)n verir# ??ostream nesnesine # %sh ve a end !"elletiri&ileri erletirir# ??ostream k!kenli -o#stream gibi/ ak kapatlr# anlamlarn tar#

Uos"a ara O3kt3H o#stream s3n3#3


o#stream sn+ ostream sn+ndan tretilmitir# $% "den ostream sn+nn etneklerine sahiptir, ek )larakta d)s alara eriir ve a"mak iin d)s alar aabilir# C++ pr)gramlarnda o#stream sn+n k%llanabilmek iin, !nilemle i&i !nergelerine .in! %de -#stream* m%tlaka eklenmelidir# #stream

eklenin&e !in !o%t gibi nesneler )t)matik )larak bildirilmi )lma" )nlar iin iostream sn+ eklenmelidir# o#stream sn+nn ap& ilevleri %nlardr* o#stream nesne C 6emel ap& ilevdir# =aha s)nra karlala&ak )lan d)s a ile ilgili o#stream nesnesi )l%t%r%r# open( ) e ilevi b%rada k%llanlabilir# o#stream nesne(!har !onst0 name, int mode)C $% ap& ilev, mode kt m)d%n% k%llanarak name adndaki d)s a o#stream nesnesine ilikilendirmek iin k%llanlr# kt m)d% iosHHo%t )larak varsa lr# <br kt m)dlar ise ileride anlatla&ak# 'adaki !rnekte, eni )l%t%r%lm% bir d)s a (JtmpJ"eniJ), o#stream o%t nesnesi ile ilikilendirilerek ina edilmitir# o#stream o%t(=JtmpJ"eniJ?) / $%rada hemen belirtelim bir o#stream i d)s a betimle i&i -+ile des&ript)r/ ile amak mmkn deildir# $%n%n nedeni* her iletim sisteminde d)s a betimle i&ilerin b%l%nma ")r%nl%l%% )lmamasdr# 'llahtan d)s a betimle i&iler -d)la l )larak/ stream&%# nesneleri ile k%llanlabilirler -ba" % g%lamalarda #i e&%# nesneleri ile de, b! le&e d)la l )larak stream&%# nesneleri ile/# $%nlarda bira"dan anlatla&ak# =)s a d)r%dan o#stream nesnesine ilikilendirmek erine, nesne !n&e ina edilir ve daha s)nra alr# void o#streamHHopen(!har !onst0 name, int mode, int perm)H o#stream nesnesi ina edilirken asl d)s a ile o#stream nesnesi, open( ) e ilevi k%llanlarak ilikilendirilir# o#streamHH! ose( ) C <n&eki ilemin tersine b% se+er o#stream nesnesini kapatmak iin ! ose( ) e ilevi k%llanlr# 8lev, kapanan nesnenin iosHH#ai ba ran D apar# =)s ann kapanmas tamp)nlanm bilgi i ilgili d)s a a b)altr# 8lgili ak nesnesi k kestii "aman bir d)s a )t)matik )larak kapanr# $% a rntdaki in&elik aada verilmitir* aslnda bir d)s a a ilitirilmemi )lan bir ak ina ettiimi"i dnelim, <rnek* )+stream )str nin alt kab%l edildi# (imdi d%r%ma good( ) ile bakalm , s+r )lma an bir deer d!ner#- ani here tamam/# $%radaki good( ) d%r%m% ile, ak

nesne inasnn baarl )ld%%n% g!sterir# 'ma b%, d)s ann a r&a alm )ld%% anlamna gelme"# 'kn aslnda ak )l%p )lmadn snamak iin o#streamHHis$open( ) k%llanlmal# $% snama s)n%&% d)r% ise -tr%e/, ) "aman ak demektir# <rnek* .in! %de -iostream* .in! %de -#stream* %sing namespe!e std / int main( )< o#stream o# / !o%t--?o# %n a!ikd%r%m% ?--&oo a pha--o#.is$open( )--end / o#.open(=JdevJn% J?) / BBLin%Z sistemlerinde !o%t--?o# %n a!ik d%r%m%--o#.is$open( )--end / IJJJHK BBktC )+ %n a&ik d%r%m% +alse )+ %n a&ik d%r%m% tr%e BB

Mk32 nesne erini aOan mod ar


'adaki d)s a m)dlar ve a d)s a ba raklar o#stream nesnelerini amak ve a ina etmek iin tanmlanmlardr# =eerler iosHHopenmode tipindedir# iosHHapp H 3er kt k)m%t%ndan !n&e d)s a s)n%na eniden erleir# Nar)lan d)s a ierii k)r%n%r# iosHHate H <n&e d)s a s)n%nda balatr# Nar)lan d)s a ierii k)r%n%r# iosHH&inar" H 8ki&i bir d)s a aar# -metin ve iki&i sistemler arasnda +ark )l%t%rmak iin k%llanlr US?=OS ile USSbOA=ObS ben"eri gibi/ iosHHin H Ok%mak iin d)s a aar# =)s a m%tlaka !n&eden b%l%nmaldr#

iosHHo%t H =)s a aar# =)s a )ksa d)s a )l%t%r%r# =)s a varsa eniden a"lr# iosHHtr%n! H $alangta b) d)s a ile balar# =)s ann !n&eden var)lan ierii ka b)l%r# 'adaki d)s a ba rak bileimleri !"el anlamlar tar C o%t Z app H 9)ksa d)s a )l%t%r%l%r, bilgi her "aman ak s)n%na erletirilir# o%t Z tr%n! C =)s a a"m iin b) )larak -ve a eniden/ )l%t%r%l%r# in Z o%t C 'k )k%n%r ve a"lr# $%n%n annda, d)s a m%tlaka )lmaldr# in Z o%t Z tr%n! C 'k )k%n%r ve a"lr# <n&e b) )larak -ve a eniden/ )l%t%r%l%r

Be eGe O3kt3H )ostringstream) s3n3#3


$ellee bilgi a"mak iin stream %ns%rlar k%llanlr# $%nlardan ostringstream nesneleri k%llanlabilir# Aesneler ostream nesnelerinden tretilir# Salanan ap& ilevler ve eler aada verilmitir* ostringstream ostr(string !onst 6s, iosHHopenmode mode) H $% ap& ilev k%llanld "aman, s)n ve a her iki deiken atlanabilir# $% ap& ilev a r&a sade&e openmode deikene sahiptir# String belirtilmi ve iosHHate ise, ostringstream nesnesi string s ile balatlr ve geri kalan erletirmeler ostringstream nesne ieriine k)n%r# String s salanmsa, baka seenei )lma", nesne e k)nm% herhangi bir bilgi dinamik erleimli bellekte saklanr, ostringstream nesnesi g!rnt dna ktnda silinir# string ostringstreamHHstr( ) !onst H $% e ilev ostringstream nesnesinde sakl stringi d!ndrr#

ostringstreamHHstr(string) H $% e ilev ostringstream nesne ieriini eni deeri ile eniden balatr# ostringstream sn+nn k%llanmlarn aadaki !rneklerde g!re&eksini"* deiik deerleri nesne e sakla a&aksn"# =aha s)nra sakl metin stringe erletirile&ek, %"%nl%% ve ierii a"drla&ak# $% tr ostringstream nesneleri )% ke" tipi stringe evirme aparken k%llanlr# $iimlendirme k)m%tlar ostream nesneleri iin )ld%% kadar, stringstream ler iin de k%llanlabilir# 8te ostringstream nesne k%llanmn g!steren bir !rnek* .in! %de -iostream* .in! %de -string* .in! %de -sstream* .in! %de -#stream* %sing namespa!e std / int main( )< ostringstream ostr(=he o?, iosHHate) / !o%t--ostr.str( )--end / ostr.set#(iosHHsho(&ase) / ostr(iosHHhe', iosHH&ase#ie d) / ostr--11589 / !o%t--ostr.str( )--end / ostr--?44? / ostr.%nset#(iosHHhe') / ostr--11 / !o%t--ostr.str( )--end / IJJJHK BB hell) hell) @ZF@FR hell) @ZF@FR cDE BB

\][U]

C++ dilinde girdi ilemleri, istream sn+na da anr# istream sn+ aklardan bilginin elde edilmesini sala an ile ve eleri tanmlar# Tlde etme ile&i -55/ ve istreamHHread( ) ben"eri !"el ilevler ile aklardan biimlenmemi bilgi )k%n%r# istream sn+ndan )k sa da eni sn+ tretilir, b%nlarn hepsi istream sn+nn ilevikliine ve kendilerine !"g baka !"elliklere sahiptir# $ira"dan WWistream sn+nn girdi i gerekletiren eteneklerini WW=)s a )k%mak iin alan i#stream sn+n WW=)s ada saklanma an bellekteki metinleri )k%mak iin istringstream sn+, a rntlar ile in&elene&ek#

Mna girdi/ )istream) s3n3#3


6emel 7B eteneklerini tanmla an sn+ istream sn+dr# Ka nak k)dlarda g!rnen .in! %de -iostream* !nilemle i&i !nergesi ile istream nesnesi )lan !in nesnesi bildirilir# Kaltmdan d)la girdi ile ilgili btn ios sn+ tanmlar a nen istream sn+ iinde geerlidir# istream sn+ nesneleri aadaki istream ap& ilev ile ina edilir# istream nesne(stream&%#0 s&) $% ap& ilev var)lan stream&%# tan ka naklanan, var)lan ak aka !rt ina etmek iin k%llanlabilir ve b% da d)s alara ara " )l%r# C++ ka nak k)dlarnda istream sn+n k%llanabilmek iin, .in! %de -istream* !nilemle i&i !nergesi pr)grama eklenmelidir# <ntanml istream sn+ nesnesi )lan !in i k%llanmak iin ise, .in! %de -iostream* !nilemle i&i !nergesi eklenmelidir#

istream nesne erinden ok%ma


istream sn+ hem biimlenmi hem de biimlenmemi iki&i -binar / girdi i destekler# Tlde etme ile&i -)perat)r55- //, istream nesnelerinden deerlerin tip gvenlii ile elde edilmesini salar# $iimlenmi girdi insanlarn )k% abile&ei 'SCOO k)dlardan, belli biimleme k%rallarna % %larak, bilgisa ar belleinde saklanan iki&i -binar / deerlere evrilmesi

demektir# Tlde etme ile&i -55/ eni deerler almak ")r%nda )lan nesneleri ve a deikenleri g!sterir# 'ada b%l%nan de imle karlaldnda !in**a**& / -55/ ile&inin anlam hibir "aman deime" ani !n&e en s)ldakiler !n&e ilemlenir (!in**a), s)nra !in nesnesinin a n )lan istream6 nesne sine d!nlr, $! le&e de im aadaki hale indirgenir* !in**& / ve daha s)nra & elde edilir# Tlde etme ile&inin -55/ )k sa da bindirimli tr b%l%n%r ve )k sa da deiken tipi istream nesnesinden elde edilebilir# $% bindirimli trler arasnda erleik )lan tipler iin )ld%% kadar k%llan& tipler de b%l%n%r# 'klarda biimlenmi girdiler iin k)la lklar b%l%nma"# - ani C deki s!an#( ) ve vs!an#( ) ilevleri C++ da b%l%nma"/ # 'klar dn asnda b%l%nma an anlan k)la lklar salamak ) kadar ")r )lmasa da ?s!an#( ) ben"eri ilevler C++ pr)gramlarnda hemen hemen hi gerekme"# =aha da !tesi aslnda, tip gven&esi salanmamas "nden b% ilevlerden saknmak en i isidir# 8ki&i -binar / bir d)s a )k%nmak ")r%nda )ld%%nda, bilginin n)rmalde biimlenmemi )lmas la"mdr* bir int deer ardk ba tlar di"isi )larak )k%n%r, ani 'SCOO @?R sa deerleri )larak )k%nma"# istream nesnelerinden bilgileri )k%mak iin aadaki e ilevler k%llanlr* int istreamHHg!o%nt( ) / $% ilev girdi akndan aslnda )k%ma apma", sade&e s)n biimlenmemi girdi ilemi srasnda girdi akndan aplm )lan )k%madaki karakter sa sn d!ndrr# int istreamHHget( ) / TOY -d)s a s)n%n%/ d!ndrr ve a bir s)nraki tek karakteri int )larak )k%r ve d!ndrr# istream6 istreamHHget(!har6 !) / $ir s)nraki tek karakteri girdi akndan ! e )k%r# =!n deeri akn

kendisidir, d!n deeri eldenin baarl )l%p )lmadn snamak iin s)rg%lanabilir# istream6 istreamHHget(!har0 tampon, int en C,!har de imD)/ $% ilev en41 karakteri girdi akndan )k% %p tamp)ndan bala an di"i e )k%r# =i"i en a"ndan len %"%nl%%nda )lmas la"mdr# Tn +a"la en41 karakter tamp)na )k%n%r# delim varsa m )larak eni satr karakteridir ()En))# Snr kaldr& -de im/ girdi akndan kendi kendisini kaldrama"# Karakterler tamp)na )k%nd%ktan s)nra, tamp)na s)n karakterden s)nraki ere bir MSC;;4b karakteri erleir# en41 karakter )k%nmadan !n&e snr kaldr& - eni satr. ,En)/ a rastlanma"sa, eo#( ) ve #ai ( ) ilevleri 7 derini d!ndrr# =aha da !tesi bir MSC;;4b karakter snr kaldr& )larak k%llanlabilir* $% )lla MSC;4b karakteri ile s)nlanan string ler ikili -binar / d)s alardan )k%nabilir# $% get ilevini k%llanan pr)gram ka tane karakter )k%na&an peinen bilmesi la"mdr# istream6 istreamHHget ine(!har0 tampon, int en C, !har de imD) / $% ilev !n&eki ilevle ben"er davran g!sterir# 9aln" gerekten snr kaldr& ile karlatnda, delim aktan kaldrlr# Tn +a"la en41 ba t tamp)na a"lr ve takip eden MSC;;4b karakteri )k%nan string s)n%na eklenir# Snr kaldr& kendisini tamp)na saklama"# Snr kaldr& a -delim/ rastlanma"sa - en41 karakter )k%nmadan !n&e/ ) "aman #ai ( ) ve )lasdr ki eo#( ) ilevleri tr%e -.D/ d!ndrr# $%rada hemen belirtelim stdHHstring sn+ da get ine( ) ilevine destek vermektedir# ' r&a b% destek imdi anlattm" istreamHHget ine( ) ilevinden daha +a"la k%llanlmakta ve bilinmektedir# istream6 istreamHHignore(int n, int de im) / $% ilevde iki tane -seenek)larak/ deiken b%l%n%r# Ter deikensi" ar )l%rsa girdi akndan bir -D/ karakter atlanr# $ir deiken ile arlrsa n karakter atlanr# Seenek )lan ikin&i deiken snr kaldr&dr* n atlamadan ve a snr kaldr&dan -delim/ s)nra -hangisi !n&e gelirse/ ilev d!ner# int istreamHHpeek( ) / $% ilev bir s)nraki karakteri d!ndrr, ama girdi akndan karakteri gerekten kaldrma"#

istream6 istreamHHp%t&a!k(!har !) / 'ktan s)n )larak )k%nm% )lan ! karakteri bir s)nraki karakter )larak tekrar )k%nmak iin girdi akna ,geri itilir,# Ter i"in verilme"se S`a -d)s a s)n%/ d!ner# A)rmalde her "aman tek karakter geri itilir# $%rada hemen belirtelim* ! m%tlaka aktan )k%nan s)n karakter )lmak ")r%ndadr# $aka bir karakteri geri itme e almak mmkn deildir# istream6 istreamHHread(!har0 tampon, int en)/ $% ilev girdi akndan -en +a"la/ len ba t tamp)na )k%r# TOY a daha !n&e rastlanrsa daha a" ba t )k%n%r, ve e)+- / e ilevi tr%e -D/ d!ndrr#'slnda b% ilev ikili -binar / d)s alar )k%mak iin k%llanlr# i+stream sn+n anlatan b!lmde b% e ilevle ilgili !rnek verile&ek# g&)%nt- / e ilevi read- / e ilevi tara+ndan salanm )lan karakter sa sn saptamada k%llanlr# istream6 istreamHHreadsome(!har0 tampon, int en) / $% ilev girdi akndan -en +a"la/ len ba t tamp)na )k%r# Nar )lan btn karakterler tamp)na )k%n%r# 'ma S`a a daha !n&e rastlanrsa daha a" ba t )k%n%r# $%nlar ios$&aseHHeo#&it ve a ios$&aseHH#ai &it D-.set/ apmadan gereklenir# istream6 istreamHH%nget( ) / 'ka )k%nm% )lan s)n karakteri geri itmek ama& ile aplan e lem# A)rmalde eer )k%ma ileminden s)nra sade&e bir ke" istenirse baarl )l%r# 6abii p%t&a!k( ) ilevi ile#

)istream) "eri dzen eme


3er istream nesnesi eniden er d"enleme eteneine sahip )lmasa da, ba"lar b%n% apabilir# $% % anlama gelir* akn a n b!lmn tekrar tekrar )k%mak mmkndr# 9er d"enleme -ve a er belirleme/, bilgilere gelii g"el erimek ")r%nl%l%% )ld%%nda, veri taban % g%lamalarnda sklkla k%llanlr# $% ilere % g%n eleri in&ele elim* pos$t"pe istreamHHte g( ) / $ir s)nraki )k%ma ileminin aka apld ) anki -m%tlak er/ eri d!ndrr# $tn pratik % g%lamalarda pos$t"pe, %nsigned ong )larak alnr#

istream6 istreamHHseekg(o##$t"pe step, iosHHseekdir org) / $% e ilev, akn eniden erleiminde k%llanlabilir# 8lev o##$t"pe step i bekler, org tan adm b kl ba t )larak gider# $tn pratik % g%lamalarda b%rada pos$t"pe, ong )larak dnlebilir# Step in ka na )lan org, iosHHseekdir deeridir# Olas deerleri ise* iosHH&eg / org ak balang&na g!re adm b kl )larak )r%mlanr# Ter )rg belirtilmemise ) "aman i)sCCbeg k%llanlr# iosHH!%r / org ) anki ere g!re adm b kl )larak )r%mlanr# -ak te g( ) tara+ndan d!ndrlr/# iosHHend / org, akn ) anki s)n ere g!re adm b kl )larak )r%mlanr# =)s a s)n%ndan !te e )k%ma a kalkldnda, d)al )larak )k%ma gerekleme"# =)s a balang&ndan !n&e arama a i"in verilme"# iosHH&eg ten !n&e arama, iosHH#ai ba ran D -set/ apar#

Mk32 ardan girdi/ )i#stream) s3n3#3


i#stream sn+ istream sn+ndan tretilmitir# istream sn+nn eteneklerine sahiptir# 'ma sade&e eriilen d)s alar )k%mak iin k%llanlabilir# $%n%n iin b! le d)s alar m%tlaka b%l%nmaldr# i#stream sn+n C++ ka nak k)dlarnda k%llanabilmek iin, m%tlaka .in! %de -i#stream* !nilemle i&i !nergesi eklenmelidir# i#stream nesneleri iin aadaki ap& ilevler k%llanlabilir* i#stream nesne/ 6emel ap& ilevdir# open( ) esini k%llanarak, daha s)nraki asl d)s a ile ilikili nesne i )l%t%r%r# i#stream nesne(!har !onst0 name, int mode) / $% ap& ilev mode girdi m)d%n% k%llanarak, bir i#stream nesnesini name adndaki d)s a ile ilikilendirir# 7irdi m)d% varsa m )larak iosHHin dir# -dier m)dlar iin* ak nesnelerini aan m)dlar b!lmn

in&ele ebilirsini"#/ 'adaki !rnekte )k%mak iin bir i+stream nesnesi alr# 9aln" b! le bir d)s a m%tlaka )lmaldr# i#stream in(=JtmpJi kten?) / i#stream nesnesini d)s a ile d)r%dan ilikilendirmek erine, !n&e nesne )l%t%r%l%p s)nra da alabilir# void i#streamHHopen(!har !onst0 name, int mode, int perm) / i#stream nesnesi )l%t%r%l%rken open( ) e ilevi i#stream nesnesi ile asl d)s a ilikilendirir# i#streamHH! ose( ) / 'mann tersine, bir i#stream nesnesi ! ose( ) e ilevi ile kesin )larak kapanabilir# 8lev, kapanan nesnenin iosHH#ai ba ran D -set/ apar# $ir d)s a, ilikili i#stream nesnesi kmak iin s)nlandnda, )t)matik )larak kapanr# 'nlata&am" in&elie dikkat edin* bir akn ina edildiini kab%l edelim, ama herhangi bir d)s a ile ilikili )lmasn, <rnek* i#stream ostr de imi altrlm )ls%n# good( ) ilevi ile d%r%m%na baktm"da, s+r )lma an bir deer d!ner -!rnek )ls%n di e/# $%radaki good( ) d%r%m% bi"e akn d"gn ina edildiini g!sterir# =)s ann aldn g!sterme"# 'kn gerekten alp almadn snamak iin* i#streamHHis$open( ) k%llanlr# $%n%n s)n%&% tr%e -d)r%/ ise alm demektir# 8kili -binar / d)s adan )k%ma !rnei iin* aadaki !rnekte bir d)%ble deer ikili biimde d)s adan )k%nmakta# .in! %de -#stream* %sing namespa!e std / int main(int arg!, !har00 argv)< i#stream #(argvC1D) / do%& e d / JJ&inar" &iOimde do& e deGer ok%n%r #.read(reinterpred$!ast-!har0*(6d), sizeo#(do%& e)) / IJJJHK

Be ekten girdi/ )istringstream) s3n3#3


$ellekten bilgi )k%mak iin aklarn k)la lklarndan ararlanlr# $%n%n

iin istringstream nesneleri k%llanlabilir# $% nesneler istream nesnelerinden tretilmitir# 9ap& ilevler ve eler %nlardr* istringstream istr / 9ap& ilev b) bir istringstream nesnesi )l%t%r%r# Aesne daha s)nra elde edil&ek )lan bilgi ile ilerde d)ld%r%labilir# istringstream istr(string !onst6 te't) / 9ap& ilev istringstream nesnesini, string metin ierikleri ile balatarak )l%t%r%r# void istringstreamHHstr(string !onst6 te't) / $% e ilev string metin ieriklerini istringstream nesnesine -) an iinde var)lanlarn "erinede a"abilir/ saklar# O an ki ierik "erine a"abilir# istringstream nesnesi genel )larak MSC;; metinleri iki&i -binar / karlklarna evirmek iin k%llanlr -C deki atoi( ) ilevinin apt gibi/# 'ada vere&eimi" !rnek, istringstream sn+nn kendisine ait seekg( ) e ilevi ile k%llann g!stere&ektir# .in! %de -iostream* .in! %de -string* .in! %de -sstream* %sing namespa!e std / int main( )< istringstream istr(=115 589?) / JBbir miktar metin kle int ' / istr.seekg(1) / BB[DE[ i atla istr**' / BBint elde edilir !o%t--'--end / BBZ dar erletirilir istr.seekg(7) / BBbatan eniden salanr istr**' / BBint elde edilir !o%t--'--end / BBdar a"lr istr.str(=111?) / BBbaka bir metin a"lr istr**' / JBint elde edilir !o%t--'--end / JBdar erletirilir IJJJHK

kt BB F DEF DDD BB

ze e2tiri!i er
<"elletiri&iler aslnda ilevdir# 8stenirse eni !"elletiri&iler ina edilebilir# $%rada C++ standart 7B ktphanesinde b%l%nan !"elletiri&ileri in&ele e&ei"# <"elletirir&ilerin )% biim ba raklarn etkiler# $% k)n% daha !n&e ilenmiti# <"elletiri&ilerin )%nda deiken b%l%nma abilir# =eiken beklentisi )lan ka naklar m%tlaka .in! %de -iomanip* aplmaldr#

stdHH&oo a pha / $% !"elletiri&i iosHH&oo a pha ba ran D apar# sdtHHde! / Sa larn )nl%k tabana g!re ilemlenmesini salar# evirme ilemleri !"elletiri&iler erletirildikten s)nra aplr# <rnekte stdHHhe' ve stdHHo!t a n )rtamda g!sterildi* !o%t--1:--?, =--he'--1:--?, =--o!t--1:--end / kt* D>,D@, E@ stdHHend / kt tamp)n%na eni satr karakteri ekler ve hemen s)nra kt tamp)n%n% b)altr# stdHHends / kt tamp)n s)n%na string s)nlanma karakteri ekler

stdHH#i'ed / iosHH#i'ed ba ran D apar# stdHH# %sh / kt tamp)n%n% b)altr# stdHHhe' / )k%ma ve a"mann he' +)rmatnda )lmasn salar# stdHHinterna / iosHHinterna ba ran D apar# stdHH e#t / !"elletiri&i deerleri s)l ana aslar# stdHHno&oo a pha * iosHH&oo a pha ba ra @ -s+r/ aplr ani silinir# stdHHnosho(point / iosHHsho(point ba ra silinir# stdHHnosho(pos / iosHHsho(pos ba ra silinir# stdHHnosho(&ase / iosHHsho(&ase ba ra silinir# stdHHnoskip(s / iosHHskip(s ba ra silinir# stdHHno%nit&%# / 3er a"ma ileminden s)nra kt aknn b)altlmas d%rd%r%l%r# (imdi ak end , # %sh, %nit&%# ve a kapatldnda b)altlr# stdHHno%pper!ase / iosHH%pper!ase ba ra silinir# stdHHo!t / <"elletiri&i sa larn seki" tabanl sa biimlerine g!re g!sterilmesini

ve )k%nmasn salar# stdHHresetios# ags(# ags) / stdHHreset#(# ags) ilevi arlarak g!sterilen ba raklarn s+rlanmas salanr# stdHHright / =eerlerin saa aslanmasn salar# stdHHs!ienti#i! * iosHHs!ienti#i! ba ran D apar# stdHHset&ase(int &) / int deerlerin `, D@ ve D> tabanlarna g!re g!sterilmesini salar# ce', de! ve o!t !"elletiri&ilerine bir alternati+tir# stdHHset#i (int !h) / )k kk deerlere sahip sa larn belirtilen alan b klklerini tamamlamak iin k%llanlan d)ld%rma karakterlerini tanmlar# Narsa m )larak b)l%k k%llanlr# stdHHsetios# ags(# ags) / $% !"elletiri&i belirtilen ba rak deerlerini D apmak iin stdHHset#(# ags) ilevini arr# stdHHsetpre!ision(int (idth) / # oat ve a do%& e tipler g!sterilirken hassasi eti a arlar# stdHH#i'ed ile birlikte # oat ve a do%& e tipin n)ktadan s)nraki ksmn belli bir %"%nl%kta g!sterir# !o%t--#i'ed--setpre!ision(8)--8.7--end / ktC BB G#@@@@ BB stdHHset((int (idth) / $%rada !"elletiri&i bir s)nraki erletirile&ek ve a elde edile&ek )lann

geniliini deiken )larak alr# <"elletiri&imi" erletirmede maksim%m erletirile&ek karakter sa sn belirttii gibi, elde etme esnasnda karakter di"isindeki maksim%m sa da bildirebilir# !in de elde srasnda, di"i snrlarn ap "erine a"ma engellemek iin set(( ) ilevi k%llanlabilir# !in**set(((sizeo#(arra"))**arra" / !in den %"%n bir string elde edilirken en +a"la sizeo#(arra")?D karakterde alt string lere b!lnr ve s)n%na )t)matik )larak MSC;;4b karakteri aptrlr# 'klda kalmas gerekenler* set(( ) bir s)nraki er iin geerlidir# $% kt ak d%r%m%n% deitiren he' ben"eri davran g!sterme"# set((sizeo#(Bir$dizi)) k%llanld "aman Bir$dizi gerekten di"i )lmal ve b%ndan emin )lmalsn", di"i g!sterge&i )lmamaldr# stdHHsho(&ase / iosHHsho(&ase ba ra a arlanr -D aplr/# stdHHsho(point / iosHHsho(point ba ra a arlanr -D aplr/ stdHHsho(pos / iosHHsho(pos ba ra a arlanr# -D aplr/ stdHHskip(s / iosHHskip(s ba ra a arlanp D aplr# stdHH%nit&%# / 3er a"ma ileminden s)nra kt ak b)altlr# stdHH%pper!ase / iosHH%pper!ase ba ra a arlanp D aplr# stdHH(s / Ok%ma d%r%m%nda girdi tamp)n%ndaki ) anki b)l%k karakterlerinin hepsini kaldrr#

)stream&%#) S3n3#3
stream&%# sn+ aklar tara+ndan ilemlenen, girdi ve kt karakter di"ilerini tanmlar# ios nesnesine ben"er ekilde stream&%# nesneleri de, d)r%dan ina edilme"ler# 'ma baka sn+larn nesneleri tara+ndan, stream&%# sn+ !"ellii ta an nesneler )ld%klar aklanr# Sn+, C++ dilinin ilk 'ASO?OSO standart % g%lamalarna %"ant )larak erletirilmi )lanaklarda, !nemli bir r)l ) namtr# Sn+ d)r%dan k%llanlmamasna ramen, elerini b%rada anlata&a", "ira stream&%# sn+n tantmak iin en mantkl er, b% b!lmdr# 3emen bir e i daha akla alm* si"in )kbiimlilii bildiini"i kab%l edi )r%"# )kbiimlilik hakknda kendini"i eterli g!rm )rsan", sreklilik iin b% b!lm atla abilirsini"# -)kbiimlilik k)n%s% birin&i &ildimi"de ele alnd/# stream&%# sn+nn temel varlk nedeni* ak sn+larn "erinde ilem aptklar aralardan a rmaktr# $%rada akl& )lan* ek bir a"lm katmannn, arala iletiimimi"i sala an sn+lar ile, a"lm ile aralarn kendi iletiimlerinin arasnda b%l%nmasdr# $% da bi"e, a"lm tasarmnda d"enli )larak rastlanan k)m%t "in&iri )l%t%r%r# 9eniden k%llanabilen a"lm inas iin k)m%t "in&iri, generik d"enektir -generi& pattern/# 6rans+er &)ntr)l pr)t)&)l ve internet pr)t)&)l -6CKBOK/ t !rnek verilebilir# $ir stream&%#, baka bir k)m%t d"enei "in&ir !rnei )larak dnlebilir* b%rada pr)gram stream nesneleri ile k)n%maktadr, sra ile istemleri stream&%# nesnelerine iletmektedirler, sra ile aralarla iletiimde b%l%nmaktalar# $! le&e g!rdn" gibi, !n&eden daha masra+l sistem arlar ile aplabilenler, %&%" k%llan& a"lm ile gerekleni )r# stream&%# sn+nda p%& i! ap& ilev b%l%nma", ama )k sa da p%& i! e ilev b%l%n%r# $% p%& i! e ilevlere ek )larak, sn+larda sade&e !"ellik arttran )k sa da e ilev de b%l%n%r# $% prote!ted e ilevler, k%llanabilmeni" iin bira"dan verile&ek# $%rada in&elenen stream&%# sn+nn btn p%& i! e ilevleri, a nen #i e&%# iinde geerlidir# stream&%# sn+na !"el davranlar ka"andran ina sre&i a r bir b!lmde in&elenmelidir ve stream&%# nesnelerinin i+ade ettikleri de !"el !rneklerle aklanmaldr# $%nlar daha s)nraki b!lmlerde ele ala&a"# (imdi stream nesnelerinin stream&%# e ilevleri k%llanlarak aklarn )k%nmalar, a"lmalar, baka bir ere !nlendirilmeleri ve k)p alanmalar !rneklerle in&elene&ek* stream&%# sn+nda aadaki p%& i! e ilevler b%l%n%r* aadaki t"pe

streamsize btn pratik % g%lamalarda %nsigned int )larak alnabilir# 7irdi ilemleri iin p%bli& eler* streamsize stream&%#HHin$avai ( ) / $% e ilev hemen )k%nabile&ek karakter sa snn alt snrn d!ndrr# int stream&%#HHs&%mp!( ) / $ir s)nraki karakteri ve a S`a d!ndrr# Karakter, streamb%+ nesnesinden silinir# 7irdi )lma"sa s&%mp!( ), eni karakterleri temin iin %# o(( ) -prote!ted/ ilevini arr# Ter baka karakter )ksa TOY d!ner# int stream&%#HHsget!( ) / $ir s)nraki karakteri ve a S`a d!ndrr# Karakter stream&%# nesnesinden silinme"# int stream&%#HHsgetn(!har0 &%##er, streamsize) / 7irdi tamp)n%ndan n tane karakter )k%r ve b%nlar tamp)na -&%##er/ saklar# Ok%nan asl karakter sa s d!ndrlr# 8stenen karakter sa sn temin etmek iin ise, b% e ilev 'sgetn( ) -prote!ted/ esini arr# int stream&%#HH'ne't!( ) / 7irdi tamp)n%ndan ) anki karakteri siler, bir s)nraki karakteri ve a S`a d!ndrr# Karakter streamb%+ nesnesinden kaldrlma"# int stream&%#HHsp%t&a!k(!har !) / stream&%# nesnesinden )k%mak iin bir s)nraki karakter )larak ! i erleirir# $% ilev k%llanlrken )k dikkatli )lmaldr, )% ke" k)n%labile&ek en +a"la bir karakterlik er b%l%n%r# int stream&%#HHs%nget!( ) / $ir s)nraki girdi ileminde tekrar )k%na&ak )lan, girdi tamp)n%na )k%nan, s)n karakteri d!ndrr# $% ilev de k%llanlrken de )k dikkatli )lmaldr# kt ilemleri iin k%llanlan p%bli& eler* int stream&%#HHp%&s"n!( )

stream&%# tamp)n%nda er alan m%allaktaki bilgileri ara&a a"arak tamp)n% % %ml% hale getirir -!rnek* tamp)n% b)altr/# A)rmalde sade&e sn+lar !"elletirmek iin k%llanlr# int stream&%#HHsp%t!(!har !) / $% e ilev stream&%# nesnesine & i erletirir# Karakter a"mndan s)nra eer tamp)n tamamen d)larsa, ilev prote!ted e ilev over# o(( ) ararak tamp)n% ara&a b)altr# int stream&%#HHsp%tn(!har !onst0 &%##er, streamsize n) / 6amp)ndan stream&%# nesnesine n tane karakteri erletirir# 9erletirilen asl karakter sa s d!ner# $% e ilev istenen sa da karakteri erletirebilmek iin de -prote!ted/ e )lan 'sp%tn( ) e ilevini arr# Yarkl ilemler iin k%llanlan p%bli& eler* pos$t"pe stream&%#HHp%&seeko#(o##$t"pe o##set, iosHHseekdir (a", iosHHopenmode mode,iosHHin Z iosHHo%t) )##set e )k%na&ak ve a a"la&ak bir s)nraki karakterin ka masn s+rlar# $% ilem aramann d)r%lt%s%n% g!steren standart iosHHseekdir deerlerine g!re aplr# A)rmalde sn+lar !"el k%llanmlara ha"rlamak iin k%llanlr# pos$t"pe stream&%#HHp%&seekpos(pos$t"pe pos, iosHHopenmode mode,iosHHin Z iosHHo%t) / pos a )k%na&ak ve a a"la&ak bir s)nraki karakterin m%tlak erini s+rlar# A)rmalde sn+lar !"el k%llanmlara ha"rlamak iin ararlanlr# stream&%#0 stream&%#HHp%&set&%#(!har0 &%##er, streamsize n) / &%##er i stream&%# nesnesi tara+ndan k%llanla&ak ekilde tanmlar# A)rmalde sn+lar !"el k%llanmlara ha"rlamak iin ararlanlr#

>rote!ted stream&%# "e er


A)rmalde stream&%# sn+nn prote!ted elerine eriileme"# $%n%nla birlikte stream&%# sn+ndan tretilmi )lan !"el sn+lar, b% elere eriilebilir# $ahsi geen eler stream&%# sn+nn anlalmasnda ve

k%llanlmasnda )k !nemlidir# 7enellikle streamb%+ sn+nda hem veri eler, hem de e ilevler arasnda prote!ted tanmlanm eler b%l%n%r# K%llanm sarmalama ilkesini ihlal eden !teki veri eleri, b%rada imdilik in&elenme e&ek# ; e ilevlerin stream&%# sn+na salad etenekler )ld%ka +a"ladr, ve b k )laslkla d)r%dan veri elerinin k%llanmn gerektirir# $% b!lmde stream&%# sn+nn btn prote!ted eleri g!sterilme ip, sade&e sn+ !"elliklerini ina edebile&ekler anlatla&aktr#

;np%t p%t &a!k

retrieve

e&a!k( )

gptr( ) `%tp%t

p&ase( )

insert pptr( )

epptr( )

stream&%# sn+nn girdiBkt tamp)n g!stergeleri#

>rote!ted ap& ilevler* stream&%#HHstream&%#( ) * stream&%# sn+nn varsa lan -prote!ted/ ap& ilevi# >rote!ted e ilevlerin )%, girdi ilemleri ile alakaldr# Airt%a -sanal/ )larak belirtilmi )lan e ilevler stream&%# sn+ndan tretilmi sn+larda eniden tanmlanabilir# $! le d%r%mlarda, eniden tanmlanm )lan ilevler, b% tr tretilmi sn+ nesnelerinin adreslerini alm )lan iJostream nesneleri tara+ndan arlr# $%rada hatrlatalm* virt%al ilevler C++ da )kbiimliliin temel %ns%r%d%r# 8te prote!ted eler* !har0 stream&%#HHe&a!k( ) / 7irdi tamp)n%nda stream&%# sn+ tane g!stergele i apar* e&a!k( ) ilevi p%tba&k s)n%n% iaret eder* karakterler b% p)"is )nda eski erlerine k)n%r# 9%kardaki ekile baktn"da, e&a!k( ) in girdi tamp)n%n%n balang&n g!sterdiini g!rrsn"# !har0 stream&%#HHegptr( ) / 7irdi tamp)n% iin stream&%# sn+ g!sterge k%llanr* egptr( ) ilevi elde edilmi )lan s)n karakterin !tesini iaret eder# gptr( ) ilevi ile egptr( ) ilevi birbirine eitse, tamp)n m%tlaka eniden d)ld%r%lmaldr# $%, %nder# o(( ) ilevi arlarak gereklenir# 'a bakn"# void stream&%#HHg&%mp(int n) / 7irdi g!sterege&ini n !teler# !har0 stream&%#HHgptr( / * 9eniden elde edile&ek )lan bir s)nraki karakteri g!sterir# virt%a int stream&%#HHp&a!k#ai (int !) / stream&%# sn+na !"ellikler ka"andrlmas ile eniden tanmlanan b% e ilev eski ere erletirme karakteri ! g!rev apmad "aman akll ba" iler apa&aktr# $%rada dikkate alnmas gereken bir e de* girdi tamp)n%n%n balang&na eriildii iin, eski ere erletirme karakteri ! g!rev apmad "aman, eski )k%ma g!sterge&i enilenir# $% e ilev eski ere erletirme ve a elde edilmeme bir karakter g!revini erine getirmedii "aman arlr# virt%a stream&%#HHsetg(!har0 &eg, !har0 ne't, !har0 &e"ond) /

7irdi tamp)n%n% balatr* &eg girdi tamp)n alannn balang&n iaret eder, ne't elde edile&ek )lan bir s)nraki karakteri iaret eder, &e"ond girdi tamp)n%n%n s)n karakterinden s)nrasn g!sterir# neZt genellikle en a"ndan, eski ere erleme e i"in vermek iin, beg+D deerindedir# $% e ilev s+r -@/ deikenle arld "aman, girdi tamp)n% k%llanlma"# virt%a streamsize stream&%#HHsho(man"!( ) / s ve ! har+lerini karn&a ho( man" kald g!rlr# $% da, ka tane demektir# stream&%# sn+na !"ellikler ka"andrlmas sa esinde, b% e ilev eniden tanmlanr# $%, %# o(( ) ve a %nder# o(( ) ilevleri S`a d!ndrmeden !n&e, aratan )k%nabilen karakter sa snn alt snrn gven&e e alan deeri d!ndrr# Narsa m )larak s+r -@/ d!ner# -varsa lan deerin anlam* s)nraki iki ilev S`a d!ndrmeden !n&e en a" s+r -@/ karakter d!ner demektir#/ virt%a int stream&%#HH%# o(( ) / $% e ilev girdi tamp)n%na eniden eni karakterler klemek iin stream&%# sn+ !"elletirilerek eniden tanmlanr# Narsa lan % g%lama %nder# o(( ) ilevini armak -aa a bakn"/ ve )k%ma g!sterge&ini gptr( ) arttrmak iindir# virt%a int stream&%#HH%nder# o(( ) / $% e ilev, aratan baka bir karakter )k%mak iin stream&%# sn+ !"elletirilerek eniden tanmlanr# Narsa lan % g%lama S`a d!ndrr# 6amp)n k%llanldnda, )%nl%kla btn tamp)n eniden ta"elenme", b% da eniden klemeden hemen s)nra karakterlerin eski erlerine erletirilmelerini imkans" klar# $% sistem, girdi tamp)n%n%n sade&e bir paras eniden klendiinde, datk tamp)n -sp it &%##er/ )larak adlandrlr# virt%a streamsize stream&%#HH'sgetn(!har0 &%##er, streamsize n) / $% e ilev, aratan n tane karakteri tekrar almak iin stream&%# sn+ !"elletirilerek eniden tanmlanr# Narsa lan % g%lama, s&%mp!( ) ilevini her bir karakter iin armaktr# $! le&e b% ilemle, %nder# o(( ) ilevi her bir karakter iin arlr# (imdi de kt ilemlerinde k%llanlan prote!ted e ilevleri in&ele elim# 7irdi ilemlerindekilere ben"er )larak kt ilemlerinde k%llanlan ba" prote!ted e ilevler virt%a dr# $%nlar tretilmi sn+larda eniden

tanmlanrlar# virt%a int stream&%#HHover# o((int !) / $% e ilev kt tamp)n%ndaki karakterleri ara&a b)altmak iin stream&%# sn+ !"elletirilerek eniden tanmlanr# Ne daha s)nra tamp)n b) )lmas iin kt tamp)n g!stergeleri s+rlanr# ktda tamp)nlama k%llanlma"sa her karakterin stream&%# nesnesine a"lmas iin over# o(( ) ilevi arlr# $%n% gereklemek iin de tamp)n g!stergeleri s+ra -!rnek* setp( ) k%llanlrak/ a arlanr# Narsa lan % g%lama S`a d!ndrr# $% da bi"e ara&a hibir karakter a"lma a&an g!sterir# !har0 stream&%#HHp&ase( ) / kt tamp)n% iin streamb%+ sn+ tane g!sterge&i ileme k) ar* pbase- / kt tamp)n alannn balang&n g!sterir# 9%kardaki ekile bakabilirsini"# !har0 stream&%#HHepptr( ) / epptr( ) a"labile&ek s)n karakterin !tesindeki eri iaret eder# pptr( ) ilevi ile epptr( ) ilevleri eitse ) "aman tamp)n m%tlaka b)altlmaldr# $%n% gereklemek iin de over# o(( ) ilevi arlr# void stream&%#HHp&%mp(int n) / $% ilev kt g!sterge&ini n kadar !te e g!trr# !har0 stream&%#HHpptr( ) / 9a"la&ak bir s)nraki karakterin erini iaret eder# void stream&%#HHsetp(!har0 &eg, !har0 &e"ond) / $% e ilev kt tamp)n%n% balatr* &eg kt alannn balang&n &e"ond ise kt alannndaki s)n karakterden !tedeki eri iaret eder# 6amp)nlanma istenmediini belirtirken, deikenler iin s+r -@/ deeri k%llanlr# $% d%r%mda ara&a her bir karakteri a"mak iin over# o(( ) ilevi arlr# streamsize stream&%#HH'sp%tn(!har !onst0 &%##er, streamsize n) / $% e ilev ara&a n karakteri hemen a"mak iin stream&%# sn+ !"elletirilerek eniden tanmlanr# Narsa lan % g%lamada her karakter iin sp%t!( ) ilevi arlr, b%ndan d)la eniden tanmlama, sade&e daha +a"la % g%lama gerektiinde aplr#

6amp)n !netiminde ve erleim d"enlemesinde k%llanlan prote!ted elerC virt%a stream&%#0 stream&%#HHset&%#(!har0 &%##er, streamsize n) / $% e ilev tamp)n klemek iin stream&%# sn+ !"elletirilerek eniden tanmlanr# Narsa lan % g%lama* hibir e apmamaktr# virt%a pos$t"pe stream&%#HHseeko##(o##$t"pe o##set, iosHHseekdir (a", iosHHopenmode mode,iosHHin Z iosHHo%t) $% e ilev eni ilikili bir ere g!re bir s)nraki g!sterge&i s+rlamak iin stream&%# sn+ !"elletirilerek eniden tanmlanr# 3ata g!stermek iin varsa lan % g%lama ?D d!ndrr# <rnek )larak te p( ) ve a te g( ) arld "aman ilev arlr# stream&%# !"elletirmesi arama desteklediinde, ) "aman ilev tanmlamas, a r&a !"elletirmenin eniden er d"enleme -ve a te pJg( )/ istemini erine getirmesi iin aplr# virt%a pos$t"pe stream&%#HHseekpos(pos$t"pe o##set, iosHHopenmode mode, iosHHin Z iosHHo%t) / $% e ilev, eni m%tlak er girdi ve a ktsnn bir s)nraki g!sterge&ini s+rlamak iin -reset etmek/, stream&%# sn+n !"elletirerek eniden tanmlar# Narsa lan % g%lamada ?D d!ndrlerek hata g!sterilir# virt%a int s"n!( ) / $% e ilev, kt tamp)n%n% bir ara&a b)altmak iin, ve a girdi ara&n tketilen s)n karakterin erine a arlamak -reset etmek/ iin, streamb%+ sn+n !"elletirerek eniden tanmlar# Narsa lan % g%lamada -tamp)n k%llanlmadan/ s+r -@/ d!ndrlr, b% da bi"e baarl % %m )ld%%n% i+ade eder# ; e ilev tamp)nda hala b%l%nan karakterin ara&a a"lmasn gven&e e alr ve a, stream&%# nesnesi k kestii "aman arata k%llanlmam karakterleri saklama srdrr# Birazda iyi haber: aralardan bilgi )k%ma ama& ile !"elletirmeler iin %nder# o(( ) ilevini eniden tanmlarken, ve aralara bilgi a"ma ama& ile !"elletirmeler iin over# o(( ) ilevini eniden tanmlarken de )ld%ka a" i aplr# 6abii b%nlar stream&%# sn+nn !"elletirme tasarmlar srasnda gereklenir# #stream sn+ nesneleri birleik girdiBkt tamp)nlar k%llanrlar# $%, istream ve ostream sn+larnn sanal )larak ios sn+ndan, ki stream&%#

da ierir, tretilmesinden ka naklanr# istream ve ostream sn+larndan tretilen sn+lar da, )nlarn stream&%# g!stergelerini pa larlar# Yarkl tamp)nlarda hem girdi hem de kt destekle en bir sn+ ina etmek iin ise* stream&%# kendisini isel )larak iki tamp)nda tanmlamadr# Ok%mak iin seeko##( ) ilevi arld "aman, mode deikeni iosHHin deerine a arlanr, !br halde ise iosHHo%t )l%r# $% ekilde stream&%# !"elletirmesi )k%ma tamp)n% ve a a"ma tamp)n%ndan hangisine erie&eini bilir# Kek tabii )larak %nder# o(( ) ve over# o(( ) ilevleri de, hangi tamp)nlarda g!rev apa&aklarn kendileri bilirler#

#i e&%# s3n3#3
#i e&%# sn+, d)s a ak sn+lar tara+ndan k%llanlan bir stream&%# !"elletirmesidir# stream&%# sn+ tara+ndan salanan p%& i! elerden baka aadaki ek p%& i! elerde b%l%nmaktadr* #i e&%#HH#i e&%#( ) / Sn+ bir ap& ileve sahip )ld%% iin stream&%# sn+ndan +arkldr# ' r&a b% "den #i e&%# nesnesi )l%t%r%labilir# $! le&e hen" aka balanmam basit #i e&%# nesnesi tanmlanm )l%r# &oo #i e&%#HHis$open( ) / $% e ilev #i e&%# gerekten ak bir d)s a a balanrsa d)r% (tr%e) d!ndrr# 'adaki open( ) e ilevine bakn"# #i e&%#0 #i e&%#HHopen(!har !onst0 name, iosHHopenmode mode) / $% e ilev ad belli bir d)s a ile #i e&%# nesnesini ilikilendirir# =)s a iosHHopenmode tara+ndan salanan d%r%ma g!re alr# #i e&%#0 #i e&%#HH! ose( ) / $% e ilev #i e&%# nesnesi ile )n%n d)s as arasndaki balant kapatr# #i e&%# nesnesi k s)na erdirdii "aman, balant )t)matik )larak kapatlr# #i e&%# nesneleri tanmlanmadan !n&e aadaki !nilemle i&i !nergesi m%tlaka belirtilmelidir* .in! %de -#stream*

] eri kon% ar
Mk32 ar3 kop"a amak
=)s alar genellikle ka nak k)dlar a karakter karakter, a da satr satr )k%narak k)p alanr# =)s alar ilemlemedeki temel kalp aadaki gibidir* 44 s)ns%" d!ngde* 1? bir karakter )k% 1? eer )k%nma"sa - ani #ai ( ) ilevi tr%e d!ndrr/ d!ngden k 5? karakteri ilemle <nemle v%rg%lamam" gereken* snamann )k%madan s)nra gelmek me&b%ri etidir# 'n&ak sade&e ) "aman )k%ma ileminin baarl )l%p )lmad saptanabilir# $% i iin deiik % g%lamalarn )lmas ga et d)aldr* get ine(istream6, string6) ilevi istream6 in kendisini d!ndrr, b! le&e hem )k%ma hem de snama ilemi tek aklama ile gereklenmi )l%r# $tn b%nlara ramen %kardaki kalp genel d%r%m% aklar# 'adaki !rnek pr)gramda !in, !o%t a k)p alanr* .in! %de -iostream* %sing namespa!e std / int main( )< (hi e(tr%e)< !har ! / !in.get(!) / i#(!in.#ai ( )) &reak / !o%t--! / I ret%rn 7 / IJJJHK get( ) ilevi i# de imi ile beraber k%llanlarak get ine( ) ben"eri s)n% almakta )lasdr#

i#(+!in.get(!)) &reak / $%n%nla birlikte her halkarda temel k%ral hep a n* X!n&e )k%, s)nra sna[ $% tr basit d)s a k)p alama a pek sk rastlanma"# =aha sk rastlanan d)s a k)p alama trnde* bir d)s a belli bir n)ktasna kadar ilemlenir, kalan n)ktadan s)nrasnda d)s ann geri kalan ksm deitirilmeden k)p alanr# 'adaki !rnek pr)gram b% d%r%m% g!stermektedir* ignore( ) ilevi ilk satr atlamak iin arlr, -!rnein gvenlii asndan ilk satrn `@ karakterden %"%n )lmad kab%l edili )r/, ikin&i de imde !"el bindirilmi --4 ile&i k%llanlarak bir stream&%# g!stergei ikin&i aka erletirili )r# rd&%#( ) e ilevi bir stream&%#0 d!ndrr, ve b%n%n "erine hemen !o%t a erletirilir# $%, !in in geri kalan ksmn hemen !o%t a k)p alar# .in! %de -iostream* %sing namespa!e std / int main( )< !in.ignore(d7, )En,/ * !o%t--!in.rd&%#( ) / IJJJHK

BBilk satr atla BBgeri kalan streamb%+W erletirerek k)p ala

$%rada dikkat edilmesi gereken* !ntemin stream&%# nesne varln kab%l etmesi ve b%n%n stream&%# !"elletirmelerinin tamam iin almasdr# S)n% )larak* stream&%# sn+ belli bir ara iin !"elletirilmise, baka dier bir aka da b% !ntem k%llanlarak erletirilebilir#

BaG ant3 3 ak32 ar


ostream ler ios nesnelerine tie( ) e ilevi k%llanlarak balanabilir# ostream nesnesinin bal )ld%% ios nesnesinde herhangi bir "aman da gereklenen girdi ve a kt ilemleri esnasnda, b% ilev ostream nesnesinin btn tamp)nlanm ktlarn b)altr -# %sh( ) ilev ars ile/# Narsa m )larak !o%t !in e baldr -!in.tie(!o%t)/# 9ani !in "erinde herhangi bir ilem talep edildii "aman, !n&e !o%t b)altlr demektir#

$alant k)parmak iin ise, iosHHtie(7) e ilevi arlabilir# =aha ararl ama varsa lan )lma an, ak balamalarna baka bir !rnekte* !err i !o%t a balamaktr# $% )lla standart kt ve hata iletileri birbirleri ile % %ml% )larak ekranda g!rnrler# .in! %de -iostream* %sing namespa!e std / int main( )< !o%t--?!o%t a giden i k (tampon anmis) satirEn? / !err--?!err e giden i k (tampon anmamis) satirEn? / !err.tie(6!o%t) / !o%t--?!o%t a giden ikin!i (tampon anmis) satirEn? / !err--?!err e giden ikin!i (tampon anmamis) satirEn?/ IJJJHK BBretilen ktC &err e giden ilk -tamp)nlanmamis/ satir &)%t a giden ilk -tamp)nlanmis/ satir &)%t a giden ikin&i -tamp)nlanmis/ satir &err e giden ikin&i -tamp)nlanmamis/ satir BB 'klar balamann baka bir )l% da, stream lerin a n stream&%# nesnesini k%llanmalarn salamaktr# $%n% gereklemek iin, iosHHrd&%#(stream&%#0) ilevini k%llanmak la"mdr# $% )lla iki ak -!rnein kendi biimlendirmeleri/ girdi iin bir ak, kt iin de !teki ak k%llanabilir, daha "i ade iletim sistem arlar tara+ndan gereklenen eni !nlendirmeler iostream ktphaneleri k%llanlarak aplr# <rnekler iin aa a bakn"#

Mk32 ar3n "Ln endiri me eri


'klar stream&%# nesnelerini pa lamak iin iosHHrd&%#( ) esini k%llanrlar# $%n%n anlam* bir aka a"lan bilgi aslnda ikin&i bir aka a"lmaktadr demektir, b% )la ,"Ln endirme) -redire&ti)n/ di e adlandrlmaktadr# 9!nlendirme n)rmalde iletim sistemleri tara+ndan gereklenir, ama ba" d%r%mlarda C++ dilinin salad )lanaklar da gerekebilir# 9!nlendirmenin istendii standart d%r%m* hata iletilerinin standart hata

d)s as erine -d)s a belirtme sa s E )lan/, herhangi bir d)s a a a"lma d%r%m%d%r# $% UniZ iletim sisteminde &ash kab%% k%llanlarak aadaki ekilde gereklenir* program 1*JtmpJerror. og $% k)m%t sa esinde pr)gram tara+ndan a"lan herhangi hata iletileri ekran erine JtmpJerror. og d)s asnda saklanr# (imdi b%n%n stream&%# nesneleri k%llanlarak, nasl gerekletirile&eine bakalm# Kr)gram, hata iletilerinin a"la&a d)s a adn, bir ardm& deiken )larak bekler* b! le&e pr)gram aadaki gibi arlabilir program JtmpJerror. og (imdi !nlendirme i g!steren pr)gram !rnei verelim* .in! %de -iostream* .in! %de -#stream* %sing namespa!e std / int main(int arg!, !har00 argv)< o##stream err og / JJ1 stream&%#0 !err$&%##er,7 / JJ1 i#(arg!,,1)< err og.open(argvC1D) / JJ5 !err$&%##er,!err.d&%#(err og.rd&%#( )) / JJ8 I e se< !err--?&i inme"en og dos"a adiEn?/ ret%rn 1 / I !err--?stderr dos"asina i eti er, msg 1En? / !err--?stderr dos"asina i eti er, msg 1En? / !o%t--?i!erik in!e emesi ?-argvC1D--?....CSnterD? / !in.get( ) / JJ9 !err--?stderr dos"asina i eti er, msg 5En? / !err.rd&%#(!err$&%##er) / JJ: !err--?tamamEn?/ JJF IJJJHK

BBretilen kt argv0D1 &in#get- / te stderr d)s asina iletiler, msg D stderr d)s asina iletiler, msg E pr)gram s)n%nda stderr d)s asina iletiler, msg D stderr d)s asina iletiler, msg E stderr d)s asina iletiler, msg F BB ?D# ve E# satrlarda !rel deikenler tanmlanr* err og hata iletilerinin a"ld o#stream dir, !err&%##er stream&%# a g!stergetir, ki esas !err tamp)n%n% iaret eder# 'ada a rntlar* ?F# satrda eni eni hata ak ald# ?G# satrda !nlendirme gerekleti* imdi !err err og tara+ndan tanmlanm stream&%# a a"ar# <nemli )lan !err tara+ndan k%llanlan esas tamp)n%n aada anlatld gibi saklanmasdr# ?H# satrda artk bira" dinleniri", ani tene++s# $% n)ktada iki satr eni hata d)s asna a"lm )lmal d# (imdi )n%n ieriine bakma ansna sahibi"* evet iki satr d)s a iinde d%r% )rd%# ?># satr, !nlendirmenin bittii erdir# err og nesnesi main( ) ilevinin s)n%nda )rtadan kaldrlr# $% )k !nemlidir# !err tamp)n% )rtadan kaldrlmam )lsa d, ) "aman )rada !err )lma an stream&%# nesnesine da anak )la&akt# 6abii b% da beklenme en neti&elere )l aa&akt# Tsas stream&%# n !nlendirmeden !n&e saklanmas g!revi pr)gram&nn s)r%ml%l%%ndadr# $% !nlendirme s)na erdii "aman da eniden d"enlenir# ?d# satrda s)n )larak, !nlendirme bitirilirken aplanlar ekrana ine a"drlr#

Mk32 ar3 ok%ma AS "azma


$ir akta hem )k% %p hem de a"mak iin m%tlaka #stream nesnesi )l%t%r%lmaldr# 9ap& ilev, i#stream ve o#stream nesnelerinde )ld%% gibi, ala&ak d)s a adn alr# #stream ino%t(=girdi!iktidos"asi?, iosHHin Z iosHHo%t) /

$%radaki iosHHin ve iosHHo%t girdi kt sabitleri d)s ann a n anda hem girdi hemde kt iin ala&an g!sterir# )k sa da m)d, iki&i -binar / ve a ,a, ile&i ile ardarda di"ilerek k%llanlabilir# iosHHo%t a seenek )larak iosHHapp d)s a s)n%nda a"lmak s%reti ile k%llanlabilir# $ir ekilde, ba"en d)s a a a"m ve )k%ma baars" )l%r* !rnek )larak d)s a hen" )rtada )lma abilir, eer varsa "erine tekrar a"lmamalmQ 8te !"m* .in! %de -iostream* .in! %de -#stream* .in! %de -string* %sing namespa!e std / int main( )< #stream r((=#name?, iosHHo%t Z iosHHin) / i#(+r()< r(.! ear( ) / r(.open(=#name?, iosHHo%t Z iosHHtr%n! Z iosHHin) / I i#(+r()< !err--? dos"a )#name) &er&at a!i di?--end / ret%rn 1 / I !err--r(.te p( )--end / r(--?se am evren?--end / r(.seekg(7) / string s / get ine(r(, s) / !o%t--?`BWH =--s--end / IJJJHK 9%kardaki !rnekte, )#name) d)s a adna rastlamadan, ap& ilev g!revini erine getireme"# $%n%nla beraber b% d%r%mda, open( ) ilevi g!revini erine getirir# 'ma d)s a varsa asl g!rev erine getirilir# r( n balangtaki inas gibi iosHHate ba ra belirlenmi )lsa d )k%maB a"ma etkinlii varsa m )larak S`a ta )l%rd%# ' r&a iosHHate, iosHHapp deildir b%ndan d)la seekg( ) ve a seekp( ) k%llanarak r( erleimini d"enlemek hala )lasdr# 'kn ald "aman b) )larak ve a b) )lmadan )l%t%r%lmalar ve a eniden )l%t%r%lmalarn, gven&e e almak iin d)s a ba raklar #stream

nesneleri ile k%llanlrlar# Ok%mak ve a"mak iin d)s a bir ke" aldnda 44 ile&i, bilginin d)s a a erletirilmesi iin k%llanlr, 55 ile&i ise d)s adan bilginin elde edilmesini salar# $% ilemler geliig"el srada )labilir# 'adaki k)d paras bir d)s adan b)l%kla a rlan kelimeleri )k%maktadr ve daha s)nra d)s a a bir string a"maktadr# string )k%masnn s)nland erin hemen !tesinde, a"mn s)nland erin s)nra baka bir string )k%mas takip eder# #stream #(=dos"a$ismi?, iosHHin Z iosHHo%t Z iosHHtr%n!) / string str / #**str / JJilk kelime i )k% #--?se am evren? / JJmetin a" #**str / BBtekrar )k% 44 ve 55 ileleri +stream nesneleri ile birlikte k%llanlabilirler# (imdi hemen hem 44 hem de 55 ileleri a n de im iinde k%llanlabilirmi di e s)rabilirsini"# 3epsinden !te e #**str, #stream6 retmesi la"mm, )ksa la"m deilmiQ# 9antC ha r# :ira 55 elde etme ile&i ile derle i&i #stream nesnesini i#stream nesnesine d!ndrr, 44 erletirme ile&i ile de #stream nesnesini o#stream nesnesine d!ndrr# $%radaki d!ndrme, tip deiimi )lan d!km anlamndadr# $%ndan d)la aadaki tar"da a"lm de imlerde* #**str--?dede?**str / derle i&i aadaki hata iletisini verir* no mat!h #or )operator--(! ass istream, !har CdD)) =erle i&i istream sn+ ile s)r%n aadndan elde etme ile&i ile beraber, #stream nesnesi i#stream nesnesi )larak dnlr# 6abii, geliig"el elde etme ve erletirme nadiren k%llanlr# )%nl%kla erletirme ve elde etme, d)s ada belli erlerde gereklenir# $! le d%r%mlarda aplmak ")r%nda kalnan erletirme ve elde etme, seekg( ) ve te g( ) e ilevlerin&e denetlenir ve anstlr# =)s a s)n%ndan !tesini )k%ma, d)s a s)n%na erime, ve a d)s a balamadan er belirleme gibi ben"eri hata k)%llar ! ear( ) e ilevin&e temi"lenir# 9ani hata k)%llar silinir# ! ear( ) ilevini takiben sre devam

edebilir# <rnek* #stream #(=dos"a$adi?, iosHHin Z iosHHo%t Z iosHHtr%n!) / string str / #.seekg(419) / BBalma" #.! ear( ) / BBsre devam edebilir artk #**str / BBilk kelime i )k% 9a gn )larak hem )k%ma hem de a"ma ilemlerinin gerekletii d%r%mlar, veri taban pr)gramlarnda rastlanr# Neri tabanlar belli b klkte ka tlardan )l%an d)s alarn ve bilgi paralarnn b klk ve erleri )larak bilinir# 'adaki !rnek d)s a a -)lmas m%htemel/ metin satrlar ekler ve belli bir satr geri alr, b% ilemi d)s adaki d"ene g!re gerekler# Satrn ilk ba t erini elde etmek iin indeZ iki&i -binar / d)s as k%llanlr* .in! %de -iostream* .in! %de -#stream* .in! %de -string* %sing namespa!e std / void err(!har !onst0 msg)< !o%t--msg--end / ret%rn / I void err(!har !onst0 msg, ong va %e)< !o%t--msg--va %e--end / ret%rn / I void read(#stream6 inde', #stream6 strings)< int id' / i#(+(!in**id')) BBindeZi )k% ret%rn err(?&ek enen satir no)s%?) / inde'.seekg(id'0sizeo#( ong)) / BBindeZ ka masna git ong o##set / i#(+inde'.read(reinterpret$!ast-!har0*(6o##set), sizeo#( ong))) BBsatir ka masn )k% ret%rn err(?satir ka"masi "ok?, id') / i#(+strings.seekg(o##set)) BBsatir ka masina git ret%rn err(=satir ka"masi e de edi emedi?, o##set) /

string ine / i#(+get ine(strings, ine)) BBsatiri )k% ret%rn err(=satir "ok?, o##set) / !o%t--?e de edi en satir?-- ine--end / BBsatiri g!ster I void (rite(#stream 6inde', #stream 6strings)< string ine / i#(+get ine(!in, ine)) BBsatiri )k% ret%rn err(satir "ok?) / strings.seekp(7, iosHHend) / BBstringe inde'.seekp(7, iosHHend) / BBindeZe ong o##set,strings.te p( ) / i#(+inde'.(rite(reinterpret$!ast-!har0*(6o##set), sizeo#( ong))) BB)++set indeZe a" err(=inde'e "azim o madi?, o##set) / i#(+(strings-- ine--end )) BBsatirin kendisini a" err(=satir "azimi o madi?) / !o%t--?ka"ma"a "azimi ona" a?--o##set--?satirH =-- ine--end / BBsatira a"imi )na la I int main( )< #stream inde'(=inde'?, iosHHtr%n! Z iosHHin Z iosHHo%t) / #stream strings(=strings?, iosHHtr%n! Z iosHHin Z iosHHo%t) / !o%t--?ok%ma satir -sa"isi* na )o-sa"isi*) gir ve"a? =&ir satir "aza ="-sa"i*En? =ve"a T "azip !ikEn? / (hi e(tr%e)< !o%t--?o -sa"*, "az -satir*, TX = / string !md / !in**!md / i#(!md,,?T?) ret%rn 7 / i#(!md,,?o?) read(inde', strings) / e se i#(!md,,?"?) (rite(inde', strings) / e se !o%t--?&i inme"en kom%t?--!md--end / I

IJJJHK =)s a a"lmas ve )k%mas ile ilgili )larak aadaki !rnee bakabilirsini"# $%rada 'SCOOS: snrlamas g!"!nne alnmtr# .in! %de -iostream* .in! %de -#stream* %sing namespa!e std / int main( )< #stream(=he o?, iosHHin Z iosHHo%t Z iosHHtr%n!) / #.(rite(=he o?, :) / BBE?as&ii?" #.(rite(=he o?, :) / #.seekg(7, iosHH&eg) / BBd)s a balang&n resetle !har &%##erC177D / BBve a &harW b%++er.ne_ &har0D@@1 !har ! / !o%t--#.get(&%##er, sizeo#(&%##er), 7).te g( )--end / BBilk hell) )k% #**! / BBas&ii?" )k% !o%t--#.get(&%##er+:, sizeo#(&%##er)4:, 7).te g( )--end / BBikin&i hell) % )k% &%##erC9D,) ) / BBas&ii?" i, , , e d!ndr !o%t--&%##er--end / BBE de+a hell) a" IJJJHK BBretilen kt H DD hell) hell) BB 'klara hem )k%ma hem de a"ma , %kardakilerden tamamen baka bir ekilde gerekletirmek iin, ak nesnelerinin stream&%# eleri k%llanlr# $% % g%lamada daha !n&eki btn kab%ller geerlidir# 9a"ma ilemini takip eden bir )k%ma ileminden !n&e m%tlaka seekg( ) ilevi k%llanlmaldr, ve a r&a )k%ma ilemini takip eden bir a"ma ileminden !n&e de seekp( ) ilevi k%llanlmaldr# 'kn stream&%# nesneleri k%llanld "aman, a bir istream nesnesi baka bir ostream nesnesinin stream&%# nesnesi ile balantldr, ve a tersi, a da bir ostream nesnesi baka bir istream nesnesinin stream&%# nesnesi ile balantldr# $ira" !n&eki pr)gramn balantl aklarla a"lm hali aada verilmitir#

.in! %de -iostream* .in! %de -#stream* .in! %de -string* %sing namespa!e std / void err(!har !onst0 msg)< !o%t--msg--end / ret%rn / I void err(!har !onst0 msg, ong va %e)< !o%t--msg--va %e--end / ret%rn / I void read(istream6 inde', istream6 strings)< int id' / i#(+(!in**id')) ret%rn err(=&ek enen satir no?) / inde'.seekg(id'0 sizeo#( ong)) / BBindeZ ka masina git ong o##set / i#(+inde'.read(reinterpret$!ast-!har0*(6o##set), sizeo#( ong))) ret%rn err(=satirda ka"ma "ok?, id') / i#(+strings.seekg(o##set)) BBsatir ka masina git ret%rn err(=string ka"masi e de "ok?, o##set) / string ine / i#(+get ine(strings, ine)) ret%rn err(=satir "ok?, o##set) / !o%t--?sat3r e de?-- ine--end / JBsatiri g!steren I void (rite(ostream6 inde', ostream6 strings)< string ine / i#(+get ine(!in, ine)) ret%rn err(=satir "ok?) / strings.seekp(7, iosHHend) / inde'.seekp(7, iosHHend) / ong o##set,strings.te p( ) / i#(+inde'.(rite(reinterpret$!ast-!har0*(6o##set), sizeo#( ong))) err(=inde' "azimi o madi?, o##set) / i#(+(strings-- ine--end )) JBsatirin kendine a" err(=string ere "azim o madi?) / !o%t--?ka"ma"a "az?--o##set--?satirH ?-- ine--end /

I int main( )< i#stream inde'$in(=inde'?, iosHHtr%n! Z iosHHin Z iosHo%t) / i#stream strings$in(=?strings?, iosHHtr%n! Z iosHHin Z iosHHo%t) / ostream inde'$o%t(inde'$in.rd&%#( )) / ostream strings$o%t(strings$in.rd&%#( )) / !o%t--?satir -sa"isi* ok%mak iOin ,o -nos%*ve"a? =satir "azmak i!in " -satir* En? =ve"a terketmek i!in )T).En? / (hi e(tr%e)< !o%t--?o -no*, " -satir*, T X.? / BBistei g!ster string !md / !in**!md / i#(!md,,?T?) ret%rn 7 / i#(!md,,?o?) read(inde'$in, strings$in) / e se i#(!md,,?"?) (rite(inde'$o%t, strings$o%t) / e se !o%t--?&i inme"en kom%t?--!md--end / I IBBBCJ

Wn%t% mamas3 gereken not ar/


Nar)lan aklarn stream&%# nesneleri ile balantl aklar, i#stream ve a o#stream nesneleri deillerdir# -ve a b%ndan d)la istringstream ve ostringstream nesneleri de deillerdir/# 'ma temel istream ve ostream nesneleridir# stream&%# nesnesi i#stream ve a o#stream nesnesinde tanmlanmak ")r%nda deildir* aadaki ap k%llanlarak aklarn dnda tanmlanabilir# #i e&%# #&(=inde'?, iosHHin Z iosHHo%t Z iosHHtr%n!) / istream inde'$in(6#&) / ostream inde'$o%t(6#&) / A)rmal )larak d)s a a"mlarnda k%llanlan ak m)dlar, i#stream nesne inasnda k%llanlabilir# 6ersine de, n)rmalde d)s a )k%mada k%llanlan

ak m)dlar, o#stream nesnelerinin inasnda k%llanlabilir# istream ve ostream )rtak stream&%# ile balanmsa, ) "aman )k%ma ve a"ma g!stergeleri a n erleri g!sterir -ve a g!stermesi la"mdr/#9ani sk d)stlar# <ntanml #stream nesnesinde +arkl stream&%# lar k%llanmann stnl* !"el g!revleri )lan stream&%# a sahip ak nesnelerinin k%llanlabilmesidir# $! le&e stream&%# nesneler, !"el aralara ara " )l%t%rmak iin ina edilebilirler#

[VSBLS[

14(rite( ) ilevinin k%llanld basit bir !rnek


BBC@DC a"#&pp .in! %de -iostream* %sing namespa!e std / .in! %de -!string* int main( )< !onst !har0 d%r%m1,?Ma at"a? / !onst !har0 d%r%m1,?Manisa? / !onst !har0 d%r%m5,?;stan&% ? / int en,str en(d%r%m1) / !o%t--?artan dong% diziniH En? / #or(int i,7 / i-, en / i++)< !o%t.(rite(d%r%m1, i) / !o%t--?En? / I !o%t--?aza an dong% diziniHEn? / #or(i, en / i*7 /i44) !o%t.(rite(d%r%m1, i)--?En? / !o%t-?string %z%n %g%n% ge!isHEn? / !o%t.(rite(d%r%m1, en+9)--?En? / ret%rn 7 / BBsisteme d!n ret%rn 7 i+adesini BBsrekli inelememek iin a"ma abiliri"# IBBBCJ BBO3kt3H artan d)ng% di"iniC U Ua Uan Uani Uanis Uanisa a"alan d)ng% di"iniC Uanisa Uanis Uani

Uan Ua U string %"%nl%g%n% ge&isC Uanisa Osta BB

14$iim !"elletiri&ilerinin k%llanld bir !rnekC


BBC@EC$i&im#&pp .in! %de -iostream* %sing namespa!e std / int main( )< !o%t--?int &ir sa"i gir H? / int n / !in**n / !o%t--?n n0nEn? / !o%t--n--? =--n0n--?(on %k)En? / JJheZ m)d% a arla !o%t--he'/ !o%t--n--? =/ !o%t--n0n--?(he'ade!ima )En? / JJ)&tal m)d% a arla !o%t--o!t--n--? =--n0n--?(o!ta )En? / JJ!"elleitiri&i i armann baka bir )l% de!(!o%t) / !o%t--n--? =--n0n--? (de!ima )En? / ret%rn 7 / IJJJHK BBktC int bir sa i gir CDF n nWn DF D>R -)nl%k/ d aR -heZade&imal/ DH EHD -)&tal/ DF D>R -de&imal/BB

54 $iim alanlarnda karakterleri #i

( ) ilevi ile deitirmek#

BBC@FC=)ld%r#&pp .in! %de -iostream* %sing namespa!e std / int main( )< !o%t.#i ()@)) / !har0 ada"C1D,<=Ca#er Mehmet?, =Mehmet Ca#er?I / ong armaganC1D,<e77, 1597I / #or(int i,7 / i-1 / i++)< !o%t--ada"CiD--?H 0?/ !o%t.(idth(F) / !o%t--armaganCiD--?En? / I ret%rn 7 / IJJJHK BBktC Ca+er UehmetC WLLLLR@@ Uehmet Ca+erC WLLLDFH@ BB

843assasi

et a arlama ve n)ktadan s)nra gelen rakam sa sn belirleme#

BBC@GCsh)_pt#&pp .in! %de -iostream* %sing namespa!e std / int main( )< # oat #i"at1,17.97 / # oat #i"at1,1.e+d.7Je.7 / !o%t.set#(ios$&aseHHsho(point) / !o%t--?E?dost ar1 E= @?--#i"at1--?+En? !o%t--?E?dost ar1E? @?--#i"at1--?+En? !o%t.pre!ision(1) / !o%t--?E?dost ar1 E? @?--#i"at1--?+En? !o%t--?E?dost ar1 E? @?--#i"at1--?+En? ret%rn 7 / IBBBCJ BBktC

/ / / /

Xd)stlarD[ Xd)stlarE[ Xd)stlarD[ Xd)stlarE[ BB

LE@#HM LE#d```RM LE@#M LE#`M

947eerli rakam denetlemesinin


klan !rnekC

apld, aksi d%r%mlarda pr)gramdan

BBC@HCdenetle#&pp .in! %de -iostream* %sing namespa!e std / int main( )< !o%t.pre!ision(1) / !o%t--sho(point--#i'ed / !o%t--?&ir sa"i girinizH = / do%& e top am,7.7/ do%& e inp%t / (hi e(!in**inp%t)< top am+,inp%t / I !o%t--?son giren deger, =--inp%t--?En? / !o%t--?Pop am, =--top am--?En? / ret%rn 7 / IJJJHK BBktC $ir sa i girini"CD@@#@ D#@TD ?G@ ?D@: R@ s)n giren degerC?D@#@@ 6)plam.>@#@@ BB

BWanlaml s)n deer, "ira : har+i var#WB

:47irdilere hrs"lama bakmak#


BBC@>C=iki"&i#&pp .in! %de -iostream* %sing namespa!e std / .in! %de -!std i&*

int main( )< JJgirdi i )k% ve ^ iaretine kadar anst !har !h / (hi e(!in.get(!h))<JBTOY ta s)nlanr i#(+,).)) !o%--!h / e se< !in.p%t&a!k(!h) / JBkarakteri eniden erletir &reak / I I i#(+!in.eo#( ))< !in.get(!h) / !o%t--)En)--!h--?&ir sonraki karakter .En? / I e se< !o%t--?dos"a son%na erisi di.En? / e'it(7) / I (hi e(!in.peek( ) +, ).))< !in.get(!h) / !o%t--)En)--!h--?&ir sonraki karakterH En= / I e se !o%t--?dos"a son%na erisi di. En? / ret%rn 7 / IJJJHK BBK%llandm de+ter sa s ^H ama gereken adet ^F# K%llandm de+ter sa s ^ bir s)nraki karakter# H ama gereken adet ^ bir s)nraki karakter# BB

F4 =)s

ada saklama apma ilemi .in! %de -iostream* .in! %de -#stream* %sing namespa!e std /

int main( )< !har #i enameC17D / !o%t--?"eni dos"a i!in &ir isim girinH ? / !in**#i ename / JB eni d)s a iin kt ak nesnesi )l%t%r%n ve #o%t adn verin o#stream #o%t(#i ename) / #o%t--?sade!e sensin+En? / BBd)s a a a"n !o%t--?giz i rakaminizi girinH En? BBekrana a"n # oat giz i / !in**giz i / #o%t--?giz i rakaminizH =--giz i--?En? / #o%t.! ose( ) / BBd)s a i kapat JJ eni d)s a iin girdi ak nesnesi )l%t%r%n ve adn #in k) %n i#stream #in(#i ename) / !o%t--?iste i!indeki erH =--#i ename--?HEn? / !har !h / (hi e(#in.get(!h))<JBd)s adan karakter )k% !o%t--!h / JBkarakteri ekrana a" !o%t--?tamamEn? / #in.! ose( ) / ret%rn 7 / IJJJHK BBktC eni d)s a i&in bir isim girinC &anavar gi"li rakamini"i girinC D@#@@ iste i&indekiler &anavar sade&e sensin gi"li rakamini"C D@#@@ tamam BB

d4=)s

alar listesinde karakter sa m#

BBC@`Csa #&pp .in! %de -iostream* %sing namespa!e std / .in! %de -#stream* .in! %de -!std i&*

int main(int arg!, !har0 argvCD)< i#(arg!,,1)<BBdeiken )ksa k !err--?k% an3mH ?--argvC7D--?dos"a$ismiCsDEn? / e'it(1) / I i#stream #in / BBak a ong sa" / ong top am,7 / !har !h / #or(int dos"a,1 / dos"a-arg! / dos"a++)< #in.open(argvCdos"aD) / BBak argv0d)s a1 a bala sa",7 / (hi e(#in.get(!h)) sa"++ / !o%t--sa"--?karakter er?--argvCdos"aD--?En? / top am+,sa" / #in.! ear( ) / BBba" % g%lamalar iin gerekli #in.! ose( ) / BBd)s a a r I !o%t--top am--?dos"a ardaki top am karakter sa"isiEn? / ret%rn 7 / IJJJHK BBpr)gram ilgili iletim sisteminde derlenir# <rnek* d)s ta sa #eZe haline evrilir# =aha s)nra k)m%t satrndanC &5sa d)s aSadD d)s aSadE vs# a"lr# $%radan her d)s ann karakter sa s ve btn d)s alarn t)plam karakter sa s sra ile elde edilir# BB

e4 $ir d)s

a baka bir d)s a a, iletim sistemlerine !"g 'KO lere bal kalmaks"n k)p alamak# BBC@RCK)p a#&pp BBbir aktan dierine k)p alama aplrC tamp)nlanm ak k)p alamas# .in! %de -iostream* .in! %de -#stream* !onst stati! int BWa$S;bS,87e: / %sing stdHHios$&ase / int main(int arg!, !har00 argv)<

stdHHi#stream in(argvC1D, ios$&aseHHin Z ios$&aseHH&inar") / BBbtn d)s a ieriklerini )k%mak iin iki&i -binar / m)d k%llanld stdHHo#stream o%t(argvC1D, ios$&aseHHo%t Z ios$&aseHH&inar") / BBaklarn aldndan emin )l%n !har &%#CBWa$S;bSD / do< in.read(6&%#C7D, BWa$S;bS) / JBen +a"la n ba t tamp)na )k% o%t.(rite(6&%#C7D, in.g!o%nt( )) / BBtamp)n% ka a" I(hi e(in.g!o%nt( )*7) / BBaklar s)r%nlara kar denetle in.! ose( ) / o%t.! ose( ) / IJJJHK JJ$% !ntemle )k h"l d)s a k)p alama apmak mmkndr# Karakterler tek tek deil tamp)nlar k%llanlarak t)ptan apld iin b% gereklemektedir#BB

174 Nerilen bir metni tersten

a"dran pr)gram

.in! %de -iostream* void print$tersten(stdHHi#stream6 #in, stdHHo#stream6 #o%t)< !har !h / i#(#in.get(!h))< print$tersten(#in, #o%t) / #o%t--!h / I I int main( )< stdHHi#stream inp%t()in.t't)) / stdHHo#stream o%tp%t()o%t.t't)) / print$tersten(inp%t, o%tp%t) / IJJJHK

5.BLM

BML;>LM[ (temp ates)


C++ dili sade&e nesne !nelimli bir dil deildir# $irin&i kitabm"da belirttiimi" gibi C++ )k paradigmal bir dildir# Kalpl paradigma b%nlardan biridir# Kalp !"ellii b% paradigmann C++ a % g%lanmasn, ve dilin g&nn )rta a kmasn salar# Kalplar, C++ standart

ktphanesinin kalbinde er alan* stringler, 7B aklar -OBO stream/, kaplar -&)ntainer/, inele i&iler -iterat)r/, alg)ritmalar ve dierleridir# Kalplar, derleme esnasnda kalp !rnekleri )larak, sn+ ve a ilev )l%t%r%lmasn sala an d"eneklerdir# $%, alma "amannda sn+lardan nesne )l%t%r%l%rken, sn+n ) nad r)le ben"er# $ir kalpta bir ve a daha +a"la deiken b%l%nabilir# $ir sn+ ve a ilev ann elde etmek iin b% deikenlere m%tlaka d)r% veriler -tip, deer ve a kalp/ aktarlmaldr# 9ani )la delillendirilmelidir# :ira b% delillere - ani aktarlan verilere/ g!re sn+larn ve a ilevlerin % g%lama ve davranlar deiir# 8te pr)gramlamann b% eidi Kalpla Kr)gramlama -7enerik pr)gramlama/ di e adlandrlr# 9ani elde ha"r bir ilev ve a sn+ kalb var, si" b% kalbn deikenlerine pr)gramlarn"a % g%n veriler -b%nlar tip, herhangi bir deer ve a baka bir kalp dahi )labilir/ aktararak s)r%nlarn" !" )rs%n%"# Kalplar a r&a derleme esnasnda k)d seiminde de k%llanlabilir# $! le&e retilen k)d%n davranlarn etkilemek ve p)litikalarn k%rg%lamak mmkndr# $% tr pr)gramlama, kalp st pr)gramlama -template metapr)gramming/ )larak adlandrlr# Kalpla pr)gramlama, geleneki nesne !nelimli pr)gramlama a ben"eme"# Aesne !nelimli pr)gramlama tip )kbiimlilii -tip p)li+)rmi"m/ )dakldr# 9ani sn+lar, nesneler ve virt%a ilevler gereklidir# Kalp tabanl pr)gramlama ise, deiken )kbiimlilii -parametrik p)li+)rmi"m/ )dakldr# $ir sn+ ve a ilev, deikenlerinden bams" )larak tanmlanabilir# $ir ilev bildirimi ve a tanm, bir sn+ bildirimi ve a tanm kalp bildirimi )labilir# Kalp bildiriminde bir ve a daha +a"la deiken b%l%nabilir# $% deikenler deer, tip, ve a baka sn+ kalplar )labilir# Kalp % g%lamalarnn )%nda, kalba basit bir ad verilerek ve kalp deikenlerine de* sabit aklamalar, tipler ve a kalp da anlar erletirilerek ilem aplr# 8te b%, kalbn ) anki deeridir, a da kalbn anlk d%r%m%d%r -instantiating template/# $ir kalbn anlk d%r%m% )n%n k%llanm n)ktasnda elde edilir ve a, baka bir sn+ a da ilev bildirimi )larak baka bir d%r%m annda bildirilebilir# 8lev kalp !rnei ilev )l%t%r%r, sn+ kalp !rnei ise iindeki btn eleri ile birlikte bir sn+ )l%t%r%r#

Ba 3p ]2 ev eri
9%karda kalplar "erine bir giri aptk, imdi kalp ilevleri k)n%s%nda

a rnt a dala&a"# 'slnda k)n% bal ilev kalplar )lmal d ama bi", )n%n s)n%lar )lan kalp ilevleri deme i % g%n g!rdk# <rnek vererek kalp ilevini anlatalm* iki int sa dan daha kk )lan b%lan bir ilev a"alm* int min(int a, int &)< ret%rn (a-&) X a H & / IJBilk !rnek ilev (imdi de iki do%& e sa dan daha kk )lan b%lan ilevi a"alm* do%& e min(do%& e a, do%& e &)< ret%rn (a-&) X a H & / IJJikin&i !rnek ilev 7!rld "ere ilev tipi deimesine ramen ilev g!vdesi a n kald# $% kadar basit ilevler iin k)p ala aptr teknii ile tipi deitirebilirsini"# Yakat karmak ilevlerde +arkl tipler iin k)p ala aptr !"m )lma"# O "den aadaki kalp, !rneimi" iin !"m )l%r* temp ate -t"pename P* P min(P a, P &)< ret%rn (a-&) X a H & / IJB<rnek ilevler iin Ba 3p ilevi $%n% belirttikten s)nra artk aadaki % g%lama gerekletirebilirsini"* !,min-do%& e*(a, &) /JJkalp ilevi k%llanlarak ikin&i !rnek ilev BBelde edilir Si" stte do%& e erine # oat ve a int tipini de a"abilirsini", b% si"in k)%llarn"a baldr# Kalp ilevi )larak verdiimi" !rnekte aadaki !"ellikleri hemen +arkedebilirsini"* ??Kalp tanm ve a bildirimi, temp ate anahtar kelimesi ile balar# ??temp ate anahtar kelimesini k!eli a ra iaretleri arasndaki liste takip eder# $ahsi geen liste e kalp deiken listesi denir# $% listede birden +a"la !e varsa aadaki gibi a"lr*

t"pename P1, t"pename P1 ??Kalp deiken listesinde ekli tip ad )larak P i -asl P"pe ama bi" ksa&a P dedik/ g!rr"# $% tip ad, ilev tanmnda er alan ekli deiken adna ben"er# (imdi e kadar ekli deiken adlarna sade&e ilevlerde rastladk# =eikenlerin tipleri her "aman ilev tanmlanrken belirlenirdi# Kalplar, ekli adlar k)n%s%n% bir adm daha ilerletti# 6ip adlarn belli bir ekle s)kt%# $%rada t"pename tara+ndan belirtilen P, ekli tip addr ve kalp deiken listesinde k%llanlr# P gibi ekli tip adna kalp tip deikeni -template t pe parameter/ denir# $%ndan baka tipi )lma an -.tipsi"/ kalp deikenleri de -template n)n?t pe parameter/ )labilir# $ira"dan )nlar da ele ala&a"# 9eri gelmiken hemen belirtelim* ba" kitaplarda temp ate -t"pename P* aklamas temp ate -! ass P* biiminde a"lmaktadr# 9ani t"pename erine ! ass a"lmaktadr# $i" ter&ihimi"i t"pename )larak k%llandk# :ira b% i+adelerde ! ass aklamas s)n d!nemlerde tamamen terkedilmitir# ??8lev bal* kalp tip deikenlerinin b%l%nmas annda, n)rmal ilev balnn ben"eridir# 8lev arldnda ) anki asl deikenlerin asl tipleri k%llanlarak derle i&i kalp ilevini belirler# 8te b% n)ktada - ani ilevin arld/ derle i&i kesin ilevi belirler# $% sre&e anlk d%r%m -instantiati)n/ ad verilir# 8lev bal, d!n tipini g!steren ekli tip ad k%llanabilir# $% !"ellik min ilevimi"de k%llanld# ??8lev deikenleri P a ve P & )larak a"ld# $%n%n genel anlam P tipinde a ve & nesne ve a deerleri demektir# Ter b%rada P !onst6 a ve P !onst6 & denilmi )lsa d ) "aman b% deikenler -nesne ve a deer/ ilev tara+ndan deitirileme" demekti# ??Kalp ilev g!vdesi n)rmal ilev g!vdesine ben"er# (ekli tip adlar deikenleri bildirmek ve a tanmlamak iin b%rada k%llanlr# $a"en baka !rel deikenlerde eklenebilir# $%na ramen ba" kstlamalar ine de b%l%n%r# 8levin bir deer d!ndrebilmesi iin, k)p a ap& ilev ile ile ilevlerini desteklemesi gerekir# 9ani ekli tip P iin aadaki kstlamalar a"labilir* WW P, ile ilevlerini desteklemesi gerekir# WW P, k)p a ap& ilevi desteklemelidir# P, stdHHstring )lsa d ostream b%l%nmad iin, ne ile ilevleri ne de k)p a ap& ilev hibir "aman )lma"d#

Kalp tanmlar n)rmal g!rnt ve belirte g!rnrlk k%rallarna % ar# (ekli tip adlar, kalp tanmnda a n ad ta an daha geni g!rntl belirteleri etkisi altna alrlar# (imdi tekrar deiken listesinde tanmlanan ilev deikenlerini ele alalm# Ter P i P !onst6 a )larak a"arsak +a"ladan k)p alama aplmas engellenmi )l%r# (imdi baka bir !rnekle ba" k)n%larn a rntsna girelim* temp ate -t"pename P"pe* P"pe top a(P"pe !onst6 so "an, P"pe !onst6 sag"an)< ret%rn so "an+sag"an / I int main( )< %nsigned !onst6 is,%nsigned(8) / !o%t--top a(is, is)--end / I 9%kardaki !rnekte is, iaretsi" sabit -%nsigned &)nst/bir deere da an )lmaktadr# $%, top a( ) ilevine deiken verisi )larak aktarlmaktadr# $%rada so "an ve sag"an n P"pe !onst6 )lan deerleri %nsigned !onst6 ve P"pe %nsigned )r%mlanr# $aka bir seenekte P"pe !onst6 erine P"pe6 a"maktr# Sabit -!onst/ k%llanmadan deiken belirtilin&e, gei&i deerler ileve aktarlama"# 6abii b% !nemli bir de"avantaedr# $% "den aadaki k)d paras derleneme"# int main( )< !o%t--top a(string(=a?), string(=&?))--end / IBJcMPM derleneme"# :ira string &)nstV, stringV i balatama"# 'ma aadaki k)d derlenebilir* int main( )< string !onst6 s,string(=a?) / !o%t--top a(s, s)--end / IBB=erle i&i 6 pe string &)nst )larak alr# (imdi b% !rneklerden elde ettiimi" s)n%lar )r%mla alm* D? Kalp deikenleri gereksi" k)p alamalardan k)r%nmak iin

P"pe !onst6 deikenler )larak belirtilmelidirler# E? Kalp mekani"mas )ld%ka esnek bir % g%lamadr# $% mekani"mada asl tiplere bal )larak ekli tipler basit -int, # oat, !har vs/, &)nst, ve g!sterge vs# tipler )larak )r%mlanr# 'na k%ral* ekli tipin asl tip iin maske )larak k%llanlmasdr# 'ada deikenin P"pe !onst6 )larak tanmland ba" !rnekler verildi* UeGi2ken tipi ???????????????? %nsigned !onst ....... %nsigned ...... %nsigned 0 ...... %nsigned !onst 0 ..... P"pe,, ???????????????? %nsigned %nsigned %nsigned 0 %nsigned !onst 0

Kalp ilevine ikin&i !rnek )larak aadaki k)dlar in&ele elim* temp ate -t"pename P"pe, %nsigned Size* P"pe s%m(P"pe !onst (6arra")CSizeD)< P"pe t,P"pe( ) / #or(%nsigned id',7/ id'-Size/ id'++) t+,arra"Cid'D / ret%rn t / I Tvet imdi daha !n&eki ilev kalbndan +arkl bir d%r%mla kar kar a "# D? Kalp deiken listesinde iki !e var# 8lk !e kalp ilevleri iin )k i i bilinen t"pename ama ikin&isi )k !"el bir !e* %nsigned# Kalp deiken listesinde k%llanlan !"el tip deikenler - ani ekli )lma an.n)n?+)rmal/, tipsi" kalp deikeni -template n)n?t pe parameter/ )larak adlandrlr# Kalp tipsi" deikeni sabit aklamadr, ve kalbn anlk d%r%m%n&a saptanmak ")r%ndadr, ve %nsigned ben"eri var)lan tipler&e belirtilir# E? 8lev balna bakldnda bir deiken g!rlr* P"pe !onst (6arra")CSizeD $% deiken, P"pe tipinde Size !elerine sahip di"i i da an alarak bir di"i tanmlar# Ne b% deitirileme"# F? =eiken tanmnda hem P"pe hem de Size k%llanlr# 7erek P"pe gerekse Size kalp deikenleridir# =erle i&i derleme esnasnda s%m( ) kalp ilevi arldnda %nsigned deeri m%tlaka b%l%nmaldr# $%

"den Size m%tlaka sabit bir deer )lmaldr# Sabit -!onst/ aklama, tipsi" kalp deikenidir# Ne ad kalp deiken listesinde er alr# G? Kalp ilevi arld "aman derle i&i hem P"pe n ak deerini hem de Size n deerini elde edebilmelidir# s%m( ) ilevi tek deikene sahip )ld%% iin derle i&i sade&e, Size deerini ilevin asl deikeninden elde eder# 'slnda elde edilen deiken P"pe !elerine g!stergeten "i ade bir di"i ise -bilinen ve sabit b klkte/ b! le aplabilir# $% "den aadaki !rnekte birin&i satr derlenebilir ama ikin&isi derleneme"# int main( )< int va %esC9D / int0 ip,va %es / !o%t--s%m(va %es)--end / JBderlenir !o%t--s%m(ip)--end / JJ3'6' derleneme" I H? 8lev iinde t i varsa lan deerle balatmak iin P"pe t,P"pe( ) de imi k%llanlr# $%rada belli bir deer -s+r.@ ben"eri/ k%llanlama"# 3erhangi bir tipin varsa lan deeri belli bir sa k%llanmak erine varsa lan ap& ilev&e belirlenir# 6abii, her sn+ ap& ilevine bir deiken )larak sa kab%l etme"# 'ma btn tipler, hatta temel erleik tipler de, varsa lan ap& ilevleri destekler, hatrlatalm# -aslnda ba" sn+lar varsa lan ap& ilevi hi k%llanma", ama )% b%n%n dndadr/# 9erleik tiplerin varsa lan ap& ilevleri deikenleri s+r -.@/ ve a +alse -. anl/ ile balatr# $%ndan d)la P"pe t,P"pe( ) gerek bir balatmadr# t, P"pe varsa lan ap& ilevin&e balatlr# 9ani P"pe k)p a ap& ilevi k%llanlarak P"pe( ) k)p as t e atanarak deil# ' r&a b%rada seenek )larak P"pe t(P"pe( )) a"m biimi de k%llanlabilir# >? 8lk kalp ilevi ile karlatrldnda s%m( ), P"pe sn+nda belli ba" p%& i! elerin var )ld%%n% kab%l etmektedir* operator+,( ) ve k)p a ap& ilev gibi# Sn+ tanmlarnda )ld%% gibi kalp tanmlarnda da %sing !nerge ve bildirimleri b%l%nma"#

UeGi2kenden \e en er
$% b!lmde kalp ilevi arldnda, kalp tip deikenlerinin asl tiplerinin, derle i&i tara+ndan belirlenmesi sre&ine )daklana&a"# $% sre&e kalp deiken b%l%nmas -template arg%ment ded%&ti)ns/ denilir#

=aha !n&e anlatld "ere derle i&i, tek bir ekli kalp tip deikeni iin )k sa da asl deiken erletirebilir# 'ma, b! le )lsa bile btn erletirmeler geerli deildir# <"ellikle ilev, a n kalp tip deiken listesinde birden +a"la deiken )ld%% "aman, derle i&inin kab%l ede&ei asl deiken tipleri )ld%ka snrldr# =erle i&i kalp tip deikenleri iin asl tipleri saptarken sade&e deikenlerin tiplerini g!"!nne alr# $% srete ne !rel deikenler ne de ilevin d!n deeri dikkate alnr# 8lev arld "aman derle i&i, sade&e kalp ilevinin deikenlerini tam bir kesinlikle g!rebilir# ar n)ktasnda ilevin !rel deikenlerinin tipleri ak )larak g!rleme", ve ilevin d!n deeri aslnda k%llanlma", ve a eldeki kalp tip deikeninin alt tipinin -ve a st tipinin/ deikenine atanr# $% "den aadaki !rnekte derle i&i hi bir "aman komik( ) ilevini arama", "ira P"pe kalp tip deikeni iin asl tipi belirlemek mmkn deildir# temp ate -t"pename P"pe* P"pe komik( ) < ret%rn P"pe( ) / IBBcMPML; BBhibir "aman arlama"

8levde edeer kalp tip deikenlerinde genelde )k sa da deiken )l%n&a, asl tipler m%tlaka a n )lmak ")r%ndadr# 8te aada* void iki!i$de(do%& e a, do%& e &) / int ve do%& e k%llanlarak arlabilir, int deiken ile )ld%%nda ierde derle i&i tara+ndan do%& e a evrilir# =enk gelen kalp ilevi, int ve a do%& e deiken ile arlma"# =erle i&i kendisini int i do%& e a evirme k)n%s%nda ")rlama", ve s)nra P"pe n do%& e )ld%%na karar verir# temp ate -t"pename P"pe* void iki!i$de(P"pe !onst6 p1, P"pe !onst6 p1)< I int main( )< iki!i$de(8, 8.9) / IJJJHK JJderleneme" * "ira +arkl asl tipler

=erle i&i kalp tip deikenlerinin asln saptarken hangi evrimleri apmaktadrQ# =eiken tip evrimlerinden sade&e tane tip gereklenir#

-ve d!rdn&s de belli -+iZed/ bir tipin ilev deikenine aplandr - ani kalps" ilev deiken tipinin//# evrimler s)n%nda asl tiplere eriileme"se kalp ilevi g!"ard edilir# $% evrimleri imdi verelim* ?? s)l an d!nmleri* s)l an deerinden sa an deeri retilir ?? nitelik evrimleri*sabit )lma an deiken tipine &)nst !"elletiri&isi eklenir ?? $ir sn+ kalbnn anlk d%r%m%ndan ana sn+a evrim* arda bir kalp tretilmi sn+ salanm )ld%%nda, kalp ana sn+n k%llanma# ?? Kalps" tip ilev deikenleri iin standart evrimler# $% kalp deiken tip evrimi deildir# 'ma kalp ilevlerinin arta kalan kalps" tip deikenlerine karlk gelir# =erle i&i b% ilev deikenleri iin % g%n )lan herhangi bir evrimi gerekler# -!rnek* int ten %nsigned a, int ten do%& e a gibi/# 8lk evrim bira"dan a rntlar ile in&elene&ek#

So "an dLn2m eri


; eit s)l an -lval%e/ d!nm vardr* D? S)l andan sa ana evrimler -lval%e?t)?rval%e/# $% evrim sa an gerektii "aman % g%lanr# S)l an deiken )larak k%llanlr# $% da bir deiken bir ileve deer deikeni )ld%%nda )rta a kar# <rnek* temp ate -t"pename P"pe* P"pe ters e(P"pe va %e)< ret%rn 4va %e / I int main( )< int a,d / a,ters e(a) / JBs)l an-a/ sa ana -a k)p alanr/ I E? =i"iden g!stergee evrimler -arra t) p)inter/ $% evrim g!sterge deikenine bir di"i ad atand "aman % g%lanr# )%nl%kla g!sterge deikenleri ile tanmlanan ilevlerde rastlanr# $% tip ilevler arldnda, sklkla di"iler ileve atananlar )l%r# =i"i adresi g!sterge deikenine atanr, ve tipi denk gelen kalp deiken tipinin belirlenmesinde k%llanlr# <rnek*

temp ate -t"pename P"pe* P"pe top a(P"pe0 tp, %nsigned n)< ret%rn &iriktir(tp, tp+n, P"pe( ))/ I int main( )< int aC177D / top a(a, 177) / I $% !rnekte a di"isinin adresi top a( ) ilevine aktarlr, tiplere g!sterge beklenir# 'nlan evrim k%llanldnda, a nn adresi tp e atanan g!sterge ve s)nra P"pe ta int )l%r# F? 8levden g!stergee evrimler -+%n&ti)n t) p)inter/ $% evrim deikeni, ileve g!sterge )lan kalp ilevlerinde k%llanlr# $! le bir ilev arldnda, ilev ad deiken )larak tanmlanr# 8lev adresi deiken g!stergeine atanr# Ne kalp tip deikeni saptanr#$%na ilevden g!stergee evrim denir# <rnek* .in! %de -!math* temp ate -t"pename P"pe* void !a (P"pe (0#p) (P"pe), P"pe !onst6 va %e)< (0#p) (va %e) / I int main( )< !a (6sTrt, 1.7) / I $% !rnekte sTrt( ) ilevinin adresi !a ( ) ilevine aktarlr, P"pe d!ndren ileve g!sterge beklenir, ve )n%n deikeni de bir P"pe tr# 8levden g!stergee evrimi ile, sTrt adresi #p e atanan bir g!sterge deeri ve P"pe ta do%& e )larak belirlenir# 3emen akla alm b%rada 1.7 deeri 1 aplama", "ira int sTrt(int) !ntiplemesi b%l%nma"# ' r&a daha !n&eki anlattklarm"dan, ilev deikeni )larak P"pe (0#p)(P"pe) erine P"pe (0#p)(P"pe !onst6) beklemektesini"# :ira kalp ilev deikenlerinin tip saptamasnda en % g%n g!sterim, deerler erine da anlardr demitik# $%n%nla birlikte #p deikeni P"pe, bir kalp ilev deikeni deildir, ama #p ilevinin deikenini iaret eder# sTrt( ) ilevi

de do%& e sTrt(do%& e !onst6) deil, do%& e sTrt(do%& e) !ntipine sahiptir# !a ( ) deikeni #p m%tlaka P"pe (0#p)(P"pe) )larak belirtilmelidir# $% )k aktr#

Vite ik ^evrim eri


Aitelik evrimleri g!stergelere !onst -ve a vo ati e/ ekler# $% evrim kalp ilev deikeni aka !onst -ve a vo ati e/ k%llanarak tanmland "aman % g%lanr# 8levin deikeni !onst ve a vo ati e varl deildir# $% d%r%mda evrim &)nst ve a v)latile ekler, ve kalbn tip deikenini saptar# <rnek* temp ate -t"pename P"pe* P"pe ters e(P"pe !onst6 va %e)< ret%rn 4va %e / I int main( )< int a,17 / a,ters e(a) / I $%rada kalp ilevinin P"pe !onst6 va %e deikenini g!r )r%", !onst P"pe a bir da an# $%n%nla birlikte deiken bir !onst int deil, ama int deitirilebilir# Aitelik evrimi % g%lanarak derle i&i a nn tipine !onst ekler, b! le&e P"pe !onst6 va %e ile birlikte int !onst a )l%r ve P"pe ta int )lmak ")r%nda kalr#

Mna S3n3#a ^evrim


Kalp sn+larnn inasn daha s)nra ile e&ek )lmam"a ramen, kalp sn+lar imdiden k%llana&a"# <rnek )larak* s) %t kaplar -abstra&t &)ntainers/ aslnda kalp sn+lar )larak tanmlanrlar# $ilinen sn+lar -kalp sn+ )lam anlar/ gibi kalp sn+larda da sn+ hi erarileri % g%lanr# $% k)n%larn a rntlar kalp sn+lar k)n%s%nda in&elene&ek# $ir kalp sn+ dierinden nasl tretilir gibi# Kalp sn+ tretimi daha s)nra a rntlar ile in&elene&ei iin aada ele alna&ak k)n% bira" s) %t kala&aktr# Ok%r dilerse ilerdeki kalp sn+ tretimini in&eledikten s)nra b%nlar )k% abilir#

Kalp sn+m" Ae!tor, deikenin hatrna, stdHHve!tor den tretildi# Kalp ilevi, ilev nesnesi o&Q k%llanlarak ve!tor sralamas apmak iin ina edilmektedir# temp ate -t"pename P"pe, t"pename `&Qe!t* void sortAe!tor(stdHHve!tor-P"pe* ve!t, `&Qe!t !onst6 o&Q)< sort(ve!t.&egin( ), ve!t.end( ), o&Q) / I stdHHve!tor-string* nesnelerini b k har+ kk har+ d"enine bakmaks"n sralamak iin CaseLess sn+ aadaki gibi ina edilir* ! ass CaseLess< p%& i!H &oo operator( )(stdHHstring !onst6 &e#ore, stdHHstring !onst6 a#ter) !onst I ret%rn str!ase!mp(&e#ore.!$str( ), a#ter.!$str( ))-7 / I I/ (imdi deiik ve!tor lar sortAe!tor( ) ilevi ile sra a di"ilirler# int main( )< Ae!tor-string* vs , Ae!tor-int* vi / sortAe!tor(vs, CaseLess( )) / sortAe!tor(vi, ess-int*( )) / I <rnekte Ae!tor ler sortAe!tor( ) ilevine deiken )larak aktarld# Sn+ kalbnn anlk d%r%m%ndan ana sn+a evrim % g%larken, derle i&i Ae!tor stdHHve!tor )la&ak di e dnr, ve b%radan da kalbn tip deikenini karr# 9ani b%* Ae!tor vs iin stdHHstring ve Ae!tor vi iin de int demektir# Yarkl kalp deiken tip belirleme evrimlerinin ama&n anlam bakmndan lt+en i i kavra n# 'ma&n ilev verilerinin ilev deikenlerine % %ml% )lmas deil ama, deikenlere % %ml% veriler )lmas bilinmelidir# evrimler +arkl kalp tip deikenlerinin asl tiplerini saptamak iin k%llanlr#

Ba 3p Aeri erini Saptama M goritma ar3


=erle i&i aadaki alg)ritma kalp deikenlerinin asl tiplerini saptarken k%llanr* WW Sra ile, kalp ilevinin deikenleri arlan ilevin deikenleri k%llanlarak tanmlanr# WW Kalp ilev deiken listesinde er alan kalp deikenlerinin her biri iin, kalp tip deikeni ile denk gelen verinin tipi % %ml% )lmaldr# - ani* veri int a ise P"pe, int ve ilev deikeni de P"pe6 va %e )l%r/# WW Neri tipleri kalp tip deikenlerine % d%r%l%rken, gereken erlerde kalp tip deikenleri iin -.F/ tane evrim aplr# WW )k sa da ilev deikeni !"de kalp tip deikenleri ile k%llanlrsa, saptanan kalp tipleri m%tlaka a n )lmaldr# $! le&e bir s)nraki kalp ilevi, int ve do%& e veri ile arlama"# temp ate -t"pename P"pe* P"pe add(P"pe !onst6 va %e, P"pe !onst6 rva %e)< ret%rn va %e+rva %e / I $% kalp ilevi arld "aman, a n iki tip arlmak ")r%ndadr -tabii tane evrime i"in verilmi )lsa bile/# Kalp tip karm mekani"mas !"de kalp tipleri iin !"de asl tipleri sala ama"sa, ) "aman kalp ilevinin herhangi bir andaki deeri elde edileme"#

Ba 3p ]2 ev Bi dirimi
(imdi e kadar sade&e kalp ilevlerini tanmladk# 3i biri &iddi )lmamasna ramen, eitli nedenlerden d)la )k sa da ka nak d)s asnda, kalp ilev tanmlar b%l%n%r# $%nlar hakknda bilgi sahibi )lmak ararldr# WW Sn+ ara "leri gibi kalp tanmlar da, genellikle balk d)s alarnn iinde er alrlar# $alk d)s asnda er alan bir kalp tanm, derle i&i tara+ndan her )k%nd%%nda, derle i&i tanm m%tlaka tam )larak ilemlemelidir, hatta kalba gereksinim )lmasa bile# $% etkinlik derle i&inin h"n a"altr# Kalplarn ilemlenmesi ii derle i&i iin

)ld%ka )r%&%d%r# WW $ir kalp ilev deerinin saptand - ani d%r%m%n%n belirlendii/ her se+er, k)d s)n% nesne m)dlnde )rta a kar# $%n%nla birlikte bir kalbn birden +a"la d%r%m deeri varsa, )k sa da nesne d)s asndaki )nlarn kalp deikenleri iin a n asl tipler k%llanlr, daha s)nra iliim&i +a"lalk d%r%m deerlerini eler# S)n pr)gramda asl kalp tip deikenlerinin belli bir b!lm iin sade&e bir d%r%m deeri k%llanlr# $%ndan d)la iliim&inin gerekletire&ei ek bir g!rev daha )l%r -gereksi" d%r%m deerlerini eleme/, ve b%ndan !tr iliim sre&i avalar# WW $a" d%r%mlarda tanmlarn kendileri gerekme", ama sade&e kalplara g!stergeler ve a da anlar istenir# $! le d%r%mlarda tam kalp tanmlarnn ilemlenmesi iin derle i&ilerin gerekmesi, derleme srelerini l"%ms%" dere&ede avalatmaktadr# =eiik ka nak d)s alarna tekrar tekrar kalp tanmlarn k) mak erine, kalplar a r&a bildirilebilir# Kalplar bildirildii "aman derle i&i tara+ndan kalp tanmlar de+alar&a ilemlenme" ve !"de d%r%m deerleri )l%t%r%lma"# 6abii dier baka bildirimlerde )ld%% gibi, asl % g%lama bir erlerde b%l%nmaldr# Ktphanlerdeki bilinen ilevlerden +arkl )larak b%, % anda kalp ilevlerinde mmkn deildir# S)n% )larak b% ar g!rev, ani gereken anlk d%r%mlarn )l%t%r%lmas, a"lm mhendisinin )m%"larna klenmitir# 'ada b%n% gerekletirmenin basit bir )l% g!sterilmitir* $asit bir ekilde kalp ilev bildirimi aplr* ilev g!vdesi n)ktal virgl ile erine k)n%r# $% )l bilinen klasik ilev bildirimleri ile tpa tp a ndr# $! le&e add( ) kalp ilevi aadaki biimde bildirilir* temp ate -t"pename P"pe* P"pe add(P"pe !onst6 va %e, P"pe !onst6 rva %e) / 'slnda daha !n&ede b% tr bildirimlere rastlamtk# ios sn+ ve )ndan tretilmi sn+larn !elerinin anlk d%r%mlar gerekmeden ios#(d balk d)s as eklenir# <rnek )larak, bildirimi derlemek iin* stdHHstring getCsv ine(stdHHistream6 in, !har !onst0 de im) / 'rtk string ve istream balk d)s alarn eklemek gerekme", sade&e tek .in! %de -ios#(d* eterlidir# $%n%n k%llanlmas, istream ve string eklenmesi ile bildirimin

derlenmesine g!re "aman )larak d)k%"da bir sre alr#

Mn 3k U%r%m Bi dirim eri


Kalp ilev bildirimleri pr)gramlarn derleme ve iliim evrelerini h"landrrsa, neti&ede pr)gramn iliiminde kalp ilevlerinin gerekli anlk d%r%mlar gvenli bir biimde gereklenirmi a&abaQ# 6abii b%n%n iin de bir !"m b%l%n%r* bildirimin baka bir biimi# $%, anlk d%r%m%n aka belirtilmesidir# 'k anlk d%r%m bildirim !eleri %nlardr* D? template anahtar kelimesi ile balar, ama kalp deiken listesi b%l%nma"# E? =aha s)nra ilev d!n tipi ve ad belirtilir# F? 8lev adn tip !"ellik listesi takip eder, b%nlar b k kk iaretleri arasnda er alan tipler listesidir# $%nlarn her biri kalp deiken listesinde er alan kalp tip deikenlerinin asl tiplerine denk gelirler# G? 'klanan ilev deiken listesi n)ktal virglle s)nlanr# $%, aslnda bildirim )lmasna ramen, derle i&i tara+ndan anlk d%r%m%n gvenli bir ekilde gereklenmesi iin salanan ilevin !"el bir eididir# $ir pr)gram iin gereken kalp ilevlerinin btn anlk d%r%mlar, anlk d%r%m bildirimlerini aka k%llanarak tek d)s ada t)planabilir# 'nlan d)s a n)rmal bir ka nak d)s as )lmaldr, kalp tanm balk d)s asn iermelidir, ve daha s)nra gereken anlk d%r%m bildirimlerini tamaldr# (imdi anlattklarm"la ilgili bir !rnek verelim* daha !n&e tanmladm" top a( ) ilevi iin int, do%& e, ve stdH.string tipleri iin anlk d%r%m bildirimlerini g!steren d)s a a"alm# .in !%de =top a.h? .in! %de -string* %sing namespa!e std / temp ate int top a-int*(int !onst6 va %e, int !onst6 rva %e) / temp ate do%& e top a-do%& e*(do%& e !onst6 va %e, do%& e !onst6 rva %e) / temp ate string top a-string*(string !onst6 va %e, string !onst6 rva %e) / Kr)gram iin gereken anlk d%r%mlardan biri %n%t%l%rsa tamirat )ld%ka

k)la aplr* sade&e liste e eksik )lan anlk d%r%mlar a"lr, pr)gram eniden derlenir ve eniden iliimlenir#

Ba 3p ]2 ev erin Pip U%r%m ar3


=erle i&i kalp ilev tanmn )k%d%% "aman kalbn anlk d%r%m% tespit edilme"# $%rada anlk d%r%mdan kastedilen* kalbn ) anki tad tip deeri demektir# Kalp aslnda derle i&i e k%llanlmak "ere verilen bir reetedir# ' n emek tari+leri gibi# Si" elini"de b%l%nd%rd%%n%" emek tari+ini )k%rken emei apm )lma"sn"# Keki ! le se kalp ilevi tam )larak ne "aman anlk tipine, ani anlk d%r%m%na sahip )l%rQ# =erle i&inin iki tane verisi kalplarn anlk d%r%m%n% saptar* D? 7erekten k%llanldklar "aman - ani t)pla- / ilevi iki tane %nsigned deerle arld "aman/ E? 'nlk d%r%mlar kalp ilev adresleri alnd srada saptanr# <rnek* .in! %de =top a.h? !har (0top aptr)(!har !onst6, !har !onst6),top a / Kalbn anlk d%r%m%n%n derle i&i tara+ndan saptanmasn sala an aklama, kalbn anlk d%r%m n)ktas )larak adlandrlr# $% n)kta, kalp ilev k)d% iin !nemli anlamlar tar# K)n%n%n !nemi, ilerle en b!lmlerde a rntlar ile in&elene&ek# =erle i&i her "aman kalbn tip deikenlerini net ekilde sapta ama", ani mphemlik )l%abilir# $! le d%r%mlarda derle i&i, !"lmesini istedii belirsi"lii a"lm mhendisine bildirir# (imdi aadaki k)dlara bakalm* .in! %de -iostream* .in! %de =s%mve!tor.h? %nsigned komik(%nsigned (0#)(%nsigned0 p, %nsigned n)) / do%& e komik(do%& e (0#)(do%& e0 p, %nsigned n)) / int main( )< stdHH!o%t--komik(s%mAe!tor)--stdHHend / IJJJHK

9%kardaki basit pr)gram derlendii "aman derle i&i !"mle emedii bir belirsi"lii bildirir# $! le d%r%mlardan saknmak elbette mmkndr# Kalp ilevlerinin anlk d%r%mlar, sade&e belirsi"liin )lmad d%r%mlarda saptanmaldr# $elirsi"likler, derle i&i ilev seim mekani"masnda )k sa da ilev b%l%nd%%nda )l%r# $ira"dan b%nlara da deine&ei"# 6abii b% mphemlikleri )rtadan kaldrmak tamamen bi"e baldr# 9%karda b%l%nan belirsi"likler kaba&a stati!$!ast k%llanarak !"lebilir# -)k sa daki seenekten biri )larak, ama hepsi de k%llanlabilir/ .in! %de -iostream* .in! %de =top a.h? int !a (int (0#)(int !onst6 va %e, int !onst6 rva %e)) / do%& e !a (do%& e (0#)(do%& e !onst6 va %e, do%& e !onst6 rva %e)) / int va %e( )< stdHH!o%t--!a (stati!$!ast-int (0)(int !onst6, int !onst6)*(top a)) --stdHHend / ret%rn 7 / IJJJHK 3emen belirtelim* mmknse tip d!kmlerinden kanlmas la"mdr# $ira"dan tip d!kmlerinden nasl kanla&an anlata&a"# $ir !n&eki b!lmde ilendii "ere, iliim&i s)n% pr)gramda bir kalbn !"de anlk d%r%mlarnn hepsini brakma"# 'sl kalp deikenlerinden her bir kme iin sade&e bir anlk d%r%m% brakr# (imdi bir !rnekle iliim&inin davrann in&ele elim# 8liim&inin davrann g!"lemek iin aadakileri sra ile apa&a"* ??<n&e birden +a"la ka nak d)s a ina ederi"# WW s)%r&eD#&& !a ( ) ilevini tanmlar, int tip deikenler iin top a( ) nn anlk d%r%m%n% tespit eder, top a( ) nn kalp tanmn ekler, ve top a( ) nn adresini belirtir# 8te s)%r&eD#&& * BJHS)%r&eD#&pp .in! %de -iostream* .in! %de =top a.h? .in! %de =pointer%nion.h? void !a ( )< >ointerWnion p%,<top aI / stdHH!o%t--p%.pv--stdHHend /

I WW so%r!e1.!! a n ilevi tanmlar, ama bir kalp bildirimini k%llanarak -anlk d%r%m bildirimi deil/ sade&e % g%n t)pla- / kalbn bildirir# 8te so%r!e1.!! BBs)%r&eE#&pp .in! %de -iostream* .in! %de =pointer%nion.h? temp ate -t"pename P"pe* P"pe top a(P"pe !onst6, P"pe !onst6) / void !a ( )< >ointerWnion p%,<top aI / stdHH!o%t--p%.pv--stdHHend / I WW main.!! top a( ) nn kalbn ierir, !a ( ) ilevini bildirir, ve main( ) i tanmlar, top a( ) ilev adresi ile int tipi iin top a( ) tanmlar# ' r&a !a ( ) arlr# 8te main.!! * .in! %de -iostream* .in! %de =top a.h? .in! %de =pointer%nion.h? void !a ( ) / int main( )< >ointerWnion p%,<top aI / !a ( ) / stdHH!o%t--p%.pv--stdHHend / I Ka nak k)dlarn hepsi hede+ k)dlar -.o %"antl/elde etmek iin derlenir#=erlenen k)dlarn b) %t% derle i&iden derle i&i e deiir# 'ma s)%r&eD#) her "aman s)%r&eE#) den daha b k b) %tttadr# (imdi kk denememi"i apalm* main.o ile so%r!e1.o ile iliimlendirin&e, s)n% pr)gramn b) %t% bi"im sistemimi"de* DGHDG ba ttr# main.o ile so%r!e1.o ile iliimlendirin&e, kalp ilevinin gereken anlk

d%r%m% birden +a"la )lmasna ramen b% pr)gramda bir !n&eki ile a n b) %tta ve a n s)n%&% vermektedir# $% basit !rnekten % s)n% kmaktadr* iliim&i kalp anlk d%r%mlarnn a n )lanlarn, ani !"de )lanlarn kaldrr# 6ekrar tekrar k%llanlmasn engeller# Kalp bildirimleri kalp anlk d%r%mlarnn elde edilmesini salama"#

MO3k Ba 3p Pip erin B% an3m3


$ir !n&eki ksmda, derle i&i kalbn anlk d%r%m%n% tespit ederken ba" belirsi"liklerle karlaabilir, g!rdk# <rnekte b%l%nan !a ( ) ilevinin bindirimli srmleri, deikenlerin +arkl tipleri beklenerek, her ikisi kalp ilevinin anlk d%r%m% tespit edilerek saland# $% tr )rta a kan belirsi"likleri kaldrmann en akll&a )l%, stati!$!ast tip d!kmn k%llanmaktr# 'ma akln"da b%l%nmas gereken en !nemli n)kta* her "aman tip d!kmlerinden saknmaktr# stati!$!ast tar" tip d!kmlerinden saknmann me&b%r )ld%% kalp ilevlerinde ak kalp tip verileri -eZpli&it template t pe arg%ments/ k%llanlr# 'k kalp tip verileri k%llanld "aman derle i&i aka asl kalp tip deikenleri hakknda bilgilendirilir# =erle i&i b% verileri kalbn anlk d%r%m tespitlerinde k%llanr# $%rada ilev adn, asl kalp deiken tip listesi takip eder, ine gerektiinde ilevin veri listesin&e de takip edilebilir# =erle i&i tara+ndan k%llanlan asl kalp deiken listesinde b%l%nan tiplerin asllar, ilevin kalp deiken tip listesinin kalp tiplerine denk gelen, asl tipleri saptamak iindir# <n&eki !rnei ak kalp tip verileri k%llanarak gerekletirelim* .in! %de -iostream* .in! %de =top a.h? int !a (int (0#)(int !onst6 va %e, int !onst6 rva %e)) / do%& e !a (do%& e (0#)(do%& e !onst6 va %e, do%& e !onst6 rva %e)) / int main( )< stdHH!o%t--!a (top a-int*)--stdHHend / ret%rn 7 / IJJJHK

Ba 3p ]2 ev Bindirim eri

(imdi t)pla- / kalp ilevimi"e bakalm* b% ilev iki deerin biribirine eklenmesi iin tasarlanmtr# Ter tane deeri ekelmek istersek a"a&am" k)d aadaki gibi )l%r* int main( )< top a(1, top a(5, 8)) / IJJJK 9erine g!re b! le % g%lamalar mkemmel s)n%lar verir# $%n%nla birlikte, deerin d"enli )larak t)pland d%r%mlarda, bindirimli top a( ) ilevi daha ararldr# $%n%n !"m )ld%ka basittir* bindirimli kalp ilevleri# $indirimli srm tanmlamak iin, )k sa da kalp tanmlar tanm balk d)s asna erletirilir# $! le&e top a( ) ilevi aadaki gibi )l%r* temp ate -t"pename P"pe* P"pe top a(P"pe !onst6 va %e, P"pe !onst6 rva %e)< ret%rn va %e+rva %e / I temp ate -t"pename P"pe* P"pe top a(P"pe !onst6 va %e, P"pe !onst6 mva %e, P"pe !onst6 rva %e)< ret%rn va %e+mva %e+rva %e / IJJJHK $indirilmi ilev basit deerlerle tanmlanmak ")r%nda deildir# $tn bindirime %ratlm ilevler gibi ilev deikenlerinin belli bir kmesi tanm iin eterlidir# (imdi de bir vekt!rn !elerini t)pla an !rnei verelim* temp ate -t"pename P"pe* P"pe top a(stdHHve!tor-P"pe* !onst6 ve!tor)< ret%rn a!!%m% ate(ve!t.&egin( ), ve!t.end( ), P"pe( )) / IJJJHK Kalp bindirimleri, kendilerini ilevin deiken listesi ile snrlandrma"lar# Kalbn tip deiken listesinin bi""at kendisi de bindirime %ra abilir# top a( ) kalbnn s)n tanmnda ilk deiken )larak stdHHve!tor belirtilmiti, ama deT%e ve map )kt%# =)al )larak b%nlarn da b%l%nd%% bindirilmi kalp ilevleri ina edilebilir# Keki b% iin s)n%

neredeQ# (imdi gelin b% kap -&)ntainer/ sn+larnn )rtak anlarna bakalm# Ter hepsinde )rtak an b%labilirsek, b% )rtak !"elliklere da anan bindirilmi kalp ilevi tanmlar"# 'nlan kap sn+larnn hepsinde )rtak &egin( ) ve end( ) e ilevleri b%l%n%r, ve )nlar inele i&i d!ndrrler# $% k%llanlarak, anlan eleri desteklemek ")r%nl%l%%nda )lan kaplar temsil eden, kalp tip deikeni tanmla abiliri"# 'ma %n%t%lmamas gereken* basit kap tipi, hangi veri tipin anlk d%r%m%n%n k%llanla&an bi"e s! leme"# $% "den kap veri tipini g!steren ikin&i kalp tip deikeni gerekir, b! le&e kalp tip deiken listesi bindirime %ram )l%r# (imdi top a( ) kalbnn bindirimli d%r%m%n% a"alm* temp ate -t"pename Container, t"pename P"pe* P"pe top a(Container !onst6 !ont, P"pe !onst6 init)< ret%rn stdHHa!!%m% ate(!ont.&egin( ), !ont.end( ), init) / IJJJHK $tn bindirilmi srmlerin b%l%nd%% d%r%mda aadaki ilevin derle i&i tara+ndan derlenmesine bala abiliri"* %sing namespa!e std / int main( )< ve!tor-int* v / top a(5, 8) / JBD# de im top a(v) / JJE#de im top a(v, 7) / JJF#de im IJJJHK D# D#de imde derle i&i iki a n tipi, ani int k%llanr# $%ndan d)la anlk d%r%m )larak top a-int*( ) alnr# $% bi"im ilk top a( ) kalbm"n tanm d# E# E# de imde tek veri k%llanld ani v# 7erektiinde derle i&i top a( ) tek deikenli )lsa bile bindirilmiini arar# stdHHve!tor srmn b%l%rsa kalp tip deikeninin int )ld%%n% saptar# O "aman anlk d%r%m%* top a-int*(stdHHve!tor-int*!onst6) F# F#de imde derle i&i iki tane verinin b%l%nd%% deiken listesi ile karlar# 'ma verilerin tipleri +arkldr# $% "den top a( ) nn ilk kalp tanm k%llanlma"# On%n erine s)n kalp tanm +arkl tiplerle

k%llanlr# stdHHve!tor &egin( ) ve end( ) e ilevlerini destekler, derle i&i de kalp ilevinin anlk d%r%m%n% aadaki gibi tespit eder* top a-stdHHve!tor-int*, int*(stdHHve!tor-int* !onst6) 8ki +arkl kalp tip deikeni k%llanarak top a( ) tanm apmak, ve daha s)nra !br % g%lamalar ha"rlamak, top a( ) ilevi iin epe )r%&% )ld%# (imdi de t)pla- / kalp ilevini iki +arkl tipte deikenle tanmla alm* temp ate -t"pename P1, t"pename P1* P1 top a(P1 !onst6 va %e, P1 !onst6 rva %e)< ret%rn va %e+rva %e / I $% kalb iki +arkl tip deikenle k%llamak mmkn )lama"# 9ani t)pla- / ilevinin anlk d%r%m% iki +arkl tipte veri ile elde edileme"# =erle i&i tiplerle ilgili belirsi"lii !"mle eme"# 9ani d!n tipi ne )la&ak bileme"# 'adaki k)d% derleme e alrsak* int main( )< top a(5, 9.9) / IJJJHKJJcMPM der enemez =erle i&i s)n%&%n int mi )ksa do%& e m )ld%%na karar vereme"#$% "den hata retir# 6ekrar aadaki deikenli bindirilmi ilevi ele alalm* temp ate -t"pename P"pe* P"pe top a(P"pe !onst6 va %e, P"pe !onst6 mva %e, P"pe !onst6 rva %e)< ret%rn va %e+mva %e+rva %e / IJJJHK $%rada ilev verilerinin !"de )lma ")r%nl%l%% sanki de"avantae gibi g!rnebilir# 9ani tane int, tane do%& e, ve a tane string gibi# $%n% )rtadan kaldrmak iin ilevin bindirilmi srmn eniden a"abiliri"# $% se+er herhangi tipte veri kab%l edebilir# 6abii ilev pr)gramda arld "aman, +arkl tipler arasndaki operator+( ) m%tlaka tanmlanm )lmaldr# Ne b%n%n baka erlerde g!rnmesinde sakn&a

)lmamaldr# 8te herhangi tipi kab%l edebilen bindirilmi srm* temp ate -t"pename P"pe1, t"pename P"pe1, t"pename P"pe5* P"pe1 top a(P"pe1 !onst6 va %e, P"pe1 !onst6 mva %e, P"pe5 !onst6 rva %e)< ret%rn va %e+mva %e+rva %e / IJJJHK (imdi top a( ) aralm * top a(1, 5, 8) / $%rada derle i&i herhangi bir phe e mahal vermeden d)r% tip ilemlerini gerekler# $%rada ana k%ral* bir kalp ilevinin bindirilmi srmleri tanmlanrken, her bindirilmi srm, kalplarn anlk d%r%mlar elde edilirken belirsi"likten k)r%nmak iin, kalp tip deikenlerinin tek bileimini k%llanmak ")r%ndadr# 8lev deiken listesindeki kalp tip deikenlerinin sras !nemli deildir# 'adaki binarg- / kalbnn anlk d%r%m% elde edilirken belirsi"likler )rta a kar# 3atrlatalm* belirsi"likten kastedilen, derle i&inin tip hakknda kesin karar verememesidir, ani derleme apamamasdr# temp ate -t"pename P1, t"pename P1* void &inarg(P1 !onst6 #irst, P1 !onst6 se!ond)< I BBve temp ate -t"pename P1, t"pename P1* void &inarg(P1 !onst6 #irst, P1 !onst6 se!ond)< IBBsade&e 6D ile 6E er deitirdi $%rada belirsi"liin )rta a kmas art& deildir# Kalp tip deikenleri ekli adlardr# Onlarn isimleri ne )l%rsa )ls%n ) kadar anlam tama"lar# S)n )larak, bindirilmi ilevler a basit biimde ve a anlk d%r%m )larak bildirilebilirler# 'k kalp deiken tipleri de k%llanlabilir# <rnek* WW $elli bir tipin kaplarn kab%l eden top a( ) kalp ilevinin bildirimi* temp ate -t"pename Container, t"pename P"pe*

P"pe top a(Container !onst6 !ontainer, P"pe !onst6 init) / WW ' n ilev ama imdi anlk d%r%m bildirimi var -n)tC derle i&i kalbn tanmn !n&eden bilir/# temp ate int top a-stdHHve!tor-int*, int*(stdHHve!tor-int* !onst6 ve!t, int !onst6 init) WW =erle i&inin )k sa da )laslk arasnda belirsi"likleri kaldrmas iin, ak kesin veriler k%llanlr# <rnek* stdCCve&t)r4int5 vi * int s%m.t)pla4stdCCve&t)r4int5, int5-vi, @/ *

Sapm32 Pip er ]Oin Ba 3p W"d%rmak


8lk top a( ) ilev kalbm", iki a n tip deikenle tanmlanm )l%p, operator+( ) ile k)p a ap& ilevi destekle en btn tipler iin, ga et i i alr# $%n%nla birlikte ba" d%r%mlarda b% gerekler karlanma"# <rnek )larak !har0 s ele alalm, ne operator+( ) ne de k)p a ap& ilev b%l%n%r# =erle i&i b%n% bilme", ve basit kalp ilevinin anlk d%r%m%n% tespite alr* temp ate -t"pename P"pe* P"pe top a(P"pe !onst6 P1, P"pe !onst6 P1) / $%rada derleme )lma", "ira operator+( ) g!stergeler iin tanmlanmamtr# $en"er d%r%mlarda, kalp tip deikenleri ile asl k%llanlan tipler arasnda % %m )labilir# Yakat standart % g%lama d% ars"dr ve hatalar retir# S)r%n% !"mek iin kalbn ak !"ellii tanmlanr# $%, var)lan tanm iin, !"el asl kalp tip deikenleri k%llanarak kalp ilevini tanmlar# 9%karda anlatlan !rnekte !har !onst0 iin ak !"elletirme gerekir# ' r&a tabii !har0 tipi iinde# =erle i&i hala !n&eden anlatlan standart tip saptama sre&ini a nen k%llanr# $! le&e, bi"im top a( ) kalp ilevimi" !har0 verileri iin % %ml% apldnda, d!n tipi m%tlaka !har0 )lmak ")r%ndadr, ve eer veriler !har !onst0 ise ) "aman da, d!n tipi !har !onst0 )lmaldr# $% d%r%mlar iin P"pe deikeni % g%n tipe d!nr# P"pe,,!har0 iin anlk d%r%m ilevinin bal ! le )l%r*

!har0 top a(!har0 !onst6 P1, !har0 !onst6 P1) $% d%r%m istenme"se g!stergeleri veren bindirimli srm tasarlanr# 'adaki kalp ilev tanmnda iki -!onst/ g!sterge b%l%n%r, ve d!n ise !onst g!sterge deildir# temp ate -t"pename P* P0 top a(P !onst0 P1, P !onst0 P1)< stdHH!o%t--?>ointersEn? / ret%rn ne( P / IJJJHK 'ma hala )lmak istediimi" erde deili", this in bindirimli srm sabit P !e g!stergelerini kab%l eder# Sabit )lma an P !e g!stergeleri kab%l edilme"ler# 8lk bakta, derle i&inin nitelik evrimi apmamas srpri" gibi gelebilir# 'ma derle i&inin b%na ihti a& )kt%r# Sabit )lma an g!stergeler k%llanld "aman, derle i&i, iki !"de veri tipi bekle en top a( ) kalp ilevinin, balangtaki tanmn k%llanr# Sabit )lma an g!stergeleri k%llanan baka bindirilmi srm tanmlamak ")r%ndam "Q# Umkn ama ba" n)ktalarda aktr ki ama& am )l%r%"# :ira, a n n)rmal ilev ve sn+larda )ld%% gibi, kalplarnda i i tanmlanm amalar )lmaldr# $indirilmi kalp tanmlarna bindirilmi kalp tanmlarn ekleme e almak kalb h"la bir k %dge e evirir# $% aklam sakn )la takip etme in# Tn i i aklam* kalb esas ama&na % g%n ina etmektir# $% erine g!re !"el d%r%m % g%lamalarna i"in vermeli, ve kalbn ama& hakknda a rntl bilgilendirme apmaldr# $tn b%nlarn annda ba" d%r%mlarda, kalp ak !"elletirmesi )k dikkate deer )l%r# top a( ) kalp ilevimi" iin karakterlere !onst ve n)n? !onst g!stergelerin iki !"elletirmesi gereklenir# Kalp ak !"elletirmesi aadaki sralama ile ina edilir* WW temp ate anahtar kelimesi ile balar# WW S)nra al a ralardan b) bir kme a"lr# $%, !ntipini tanmla a&am" bir kalbn m%tlaka var )ld%%n% g!sterir# err aparsak ve a kalp )lma"sa derle i&i hata retir# WW =aha s)nra ilev bal tanmlanr# Kalp ak anlk d%r%m bildirimi gibi a n a"m biimi k%llanlmak ")r%ndadr* d!n tipi, ilev ad, ilev deiken listesi kadar asl kalp tip deikeni m%tlaka d)r% )lmaldr# WW 8lev g!vdesi, !"el asl kalp deiken tipleri iin gereken !"el % g%lama tanmlar#

(imdi top a( ) kalp ilevinin iki !"el halini a"alm* biri !har0 dieri !har !onst0 verilerini bekler# temp ate - * !har0 top a-!har0*(!har0 !onst6 p1, !har0 !onst6 p1)< stdHHstring str(p1) / str+,p1 / ret%rn str!p"(ne( !harCstr. ength( )+1D, str.!$str( )) / I temp ate - * !har !onst0 top a-!har !onst0*(!har !onst0 !onst6 p1, !har !onst0 !onst6 p1)< stati! stdHHstring str / str,p1 / str+,p1 / ret%rn str.!$str( ) / IJJJHK Kalbn b% tr !"el d%r%mlar, dier kalp ilev % g%lamalarnn b%l%nd%% d)s ada er alr# <"el kalp d%r%m bildirimleri de bilinen %s%lle aplr# 9ani ilev g!vdesinin erine, n)ktal virgl k)n%r# $%rada )k !nemli bir n)kta var* temp ate anahtar kelimesinden s)nra gelen ii b) al -4 5/ a ralar# $%nlarn b%rada b%l%nmas )k !nemlidir# Ter b%nlar )lmasa d, a"dm" kalp anlk d%r%m bildirimi )l%rd%# =erle i&i derleme ilemini sessi"&e srdrrd, ama )k daha %"%n derleme sresi ile# Kalbn ak !"elletirilmesi bildirilirken -ve a anlk d%r%m bildirilirken/, eer derle i&i ilevin verilerinden tipleri belirle ebilirse, kalp tip deikenlerinin ak !"elletirmesinden va"geilebilir# !har (!onst)0 !"elletirme d%r%m%nda a r&a aadaki gibi bildirilebilirdi* temp ate - * !har !onst0 top a(!har !onst0 !onst6 p1, !har !onst0 !onst6 p1) / $%rada temp ate - * atlanabilirdi# $%n%nla birlikte b% bildirimden kalp karakteri karabilirdi# (imdi s)n% bildirim basit bir e )l%r, ani sade&e basit ilev bildirimi gibi# $% hata deildir* kalp ilevleri ile kalp )lma an ilevler birbirine bindirim aparlar# A)rmal ilevler i"in verilen tip evrimleri asndan kalp ilevleri kadar kstl deildirler# $%, kalp ilevinin her se+erinde n)rmal ilevle bindirim apabilme sebebidir#

Ba 3p ]2 evinin SeOim Mekanizmas3


=erle i&i, bir ilev ars ile karlat "aman, bindirilmi hangi ilevin arla&an, m%tlaka tespit etmek ")r%ndadr# (imdi b% ilev seim mekani"mas anlatla&ak# 8n&elememi"de derle i&iden aadaki main- / ilevini derlemesini iste e&ei"* int main( )< do%& e a,11.9 / top a(a, 11.9) / IJJJHK 'adaki alt ->/ ilev bildirimini derle i&i main( ) ilevini derlerken g!rr# temp ate -t"pename P"pe* JJD# ilev P"pe top a(P"pe !onst6 va %e, P"pe !onst6 rva %e) / temp ate -t"pename P"pe1, t"pename P"pe1* JJE# ilev P"pe1 top a(P"pe1 !onst6 va %e, P"pe1 !onst6 rva %e) / temp ate -t"pename P"pe1, t"pename P"pe1, t"pename P"pe5* JJF. ilev P"pe1 top a(P"pe1 !onst6 va %e, P"pe1 !onst6 mva %e, P"pe1 !onst6 rva %e) / do%& e top a(do%& e va %e, do%& e rva %e) / JJG#ilev do%& e top a(stdHHve!tor-do%& e* !onst6 vd)/ JJH ilev do%& e divide(do%& e va %e, do%& e rva %e) / JJ>#ilev =erle i&i main( ) ilevini )k%rken hangi ilevin arldn aadaki ilemlerden s)nra saptar* WW <n&e ada ilevler kmesi ina edilir# $% kmenin ilevleri* ??? ar n)ktasndan g!rlr# ??? arlan ilevle a n ad tarlar# >#ilevin ad b% "den kmeden karlr# $! le&e derle i&i iin D den H e kadar )lan ilevler kalr#

WW 8kin&i )larak % g%lanabilir ilevler kmesi ina edilir# U g%lanabilir ilevler, asl veri tipleri ve ilev deikenlerinin tiplerini % %ml% klmak iin, tip evrimleri % g%lanabilir ilevlerdir# $%n%n anlam* veri sa s m%tlaka % g%lanabilir ilevin deiken sa sna % g%n )lmaldr# F# ve H# ilevlerin deiken sa s +arkl )ld%% iin, b%nlarda kmeden karlr# =aha s)nra D# ilev karlr, "ira b%n%n da deiken sa s % g%n deildir# E# ilev % g%nd%r "ira P"pe1 do%& e ile a verisi va %e ile % %%r a r&a tip evriminde !onst do%& e a eklenir# $en"er ekilde G #ilev de % g%nd%r "ira, do%& e dan # oat a standart evrim aplr# 3er iki ilevin -E# ve G#/ ikin&i verileri de d)r%dan % %%r# $% "den, % g%lanabilir ilevler E# ve G# ilevlerdir# WW ;n& )larak, geri kalan ilevler ter&ihe g!re sralanr ve ilki k%llanlr# Sralama her bir ilev deikenine p%an vererek aplr, ve b% p%anlar btn ilev deikenleri b) %n&a eklenir# 6am % g%nl%k )l%rsa ilev bir -D/ p%an alr, ve eer ek evrim gerekirse p%an verilme"# (imdi k)n% % !"etle elim* ??? Kalp ilevi iin, top a-do%& e, do%& e* ilevinin anlk d%r%m% alnr# 'nlan ilevin deikenleri ilev verileri ile tam % g%nl%k g!sterir, b% "den evrim gerekme"# 3er deiken bir -D/ p%an alr, b! le&e kalp ilevi iki -E/ p%an alm )l%r# ??? top a(# oat, do%& e) ilevinde ikin&i deikenin tipi ikin&i verinin tipi ile tam % %ml%d%r# 'ma birin&i verinin tipi iin evrim -do%& e dan # oat a / gerekir# $! le&e t)plam p%an bir -D/ )l%r# Sralama sre&i s)n%nda, kalp ilevi ka"anan )larak )rta a kar# $%ndan d)la biri k%llanlmak "ere seilir# 'nlk d%r%m% tespit edilir ve main( ) ilevin&e arlr# Si" alma )lmas iin !rnek pr)gram %kardaki her bir ilev iin a"n", ve s)nra derleme ve iliim ilemlerini gerekle ini", bakalm ne s)n%lar elde ede&eksini"# Tn stte )k sa da ilev )lmas, derle i&i i )t)matik )larak belirsi"lie srkleme"# =aha !n&e anlatld gibi, en !"ellemi ilev daha genel )lanlara g!re !n&elik sahibidir# $! le&e kalp ak !"ellemesi daha genel )lana g!re !n&elik alr, ve temel ilevler kalp ilevlerine g!re sralamada daha !ndedirler# -ama an&ak her ikisi de sralama sre&inin en tepesinde ise/# 6emel k%ral )larak %d%r* % g%lanabilir ilevler kmesinin tepesinde )k sa da % g%lanabilir ilev )ld%% "aman, basit ilev kalp anlk d%r%m% )rtadan kaldrlr# )k sa da ilev kalrsa ) "aman kalp ak

!"elletirmesi kaldrlr# Ter sade&e tek ilev kalrsa, ) seilir# 'ksi d%r%mda belirsi"lik )rt a kar#

Ba 3p ]2 ev Ae Mn 3k U%r%m ar3n3n Uer enmesi


top a( ) kalp ilevinin aadaki tanmn in&ele elim* temp ate -t"pename Container, t"pename P"pe* P"pe top a(Container !onst6 !ontainer, P"pe init)< ret%rn stdHHa!!%m% ate(!ontainer.&egin( ), !ontainer.end( ), init) / I $% kalp tanmnda, kabn &egin( ) ve end( ) e ilevleri k%llanlarak stdHHa!!%m% ate( ) ilevi arlr# !ontainer.&egin( ) ve !ontainer.end( ) ilev arlarna kalp tip deikenlerine bal )la&a s! lenir# C)ntainer,in ara "n g!rmeksi"in derle i&i, !ontainer,in girdi inele i&ileri d!ndren eler &egin( ) ve end( ) ilevlerinin )l%p )lmadn denetle eme"# stdHHa!!%m% ate d!n deerlerini k%llanr# <te andan stdHHa!!%m% ate in kendisi de bir ilev arsdr, ve herhangi bir kalp tip deikeninden bams"dr# $%nlar ise veriler )l%p ilev arsnn kendisi deildir# Kalp tip deikeninden bams" )lan kalp g!vdesindeki de imlere, kalp tip deikenlerine bal deildirler denir# =erle i&i bir kalp tanmn )k%d%% "aman, kalp tip deikenlerine bal )lma an btn de imlerin, a"mlarnn d)r%l%%n% saptar# 9ani btn sn+ tanmlarn, btn tip tanmlarn ve btn ilev bildirimlerini vs# m%tlaka i"lemek ")r%ndadr# Ki b%nlar, kalp tip deikenlerine bal )lma an de imlerde k%llanlr# $% k)%l karlanma"sa, derle i&i kalp tanmn kab%l etme"# S)n%ta %kardaki kalp tanmland "aman , !n&e n%meri& balk d)s as eklenmelidir, "ira b% balk d)s as stdHHa!!%m% ate( ) i bildirir# =ier andan, derle i&i kalp tip deikenlerine bal de imlerle a rntl denetimleri apama", !rnek )larak* &egin( ) ilevinin var )l%p )lmadn, hen" belirtilmemi !ontainer tipi iin saptamak mmkn deildir# $% d%r%mlarda derle i&i stnk!r denetimler gerekler, gereken eler, ileler ve tipler kab%l edilerek salanr# Kalbn anlk d%r%m%n%n elde edildii pr)gram ka nandaki erine, anlk d%r%m n)ktas denir# $% anlk d%r%m n)ktasnda, derle i&i kalp tip deikenlerinin asl tiplerini saptar# $% n)ktada kalp tip deikenlerine

bal kalp de imlerinin a"m d)r%l%klarn belirler# $%radan % anlam karlr* sade&e anlk d%r%m elde etme n)ktasnda, derle i&i m%tlaka gerekli bildirimleri )k%maldr# 'na k%ral )larakta* derle i&i kalbn her anlk d%r%m n)ktasnda, btn gereken bildirimleri -genellikle balk d)s alar/ )k%maldr# Kalp tanmnn kendisi iin ise, b%nlar )k daha rahat d"enlenebilir# 6anm )k%nd%% "aman, sade&e kalp deikenlerine bal )lma an de imler iin gereken bildirimler m%tlaka bilinmelidir#

Ba 3p Bi dirim erinin Naz3m3


Kalplar bildirilirken % %lmas gereken a"m biimleri !"et )larak aada verilmitir# A)ktal virgl erine ilev g!vdesi erletirilerek tanm haline getirilebilir# 6anm haline getirilebile&ekler, a r&a a ralar arasnda belirtildi# WW 6emel kalp bildirimi -tanm mmkn/* temp ate -t"pename P"pe1, t"pename P"pe1* void #onksi"on(P"pe1 !onst6 t1, P"pe1 !onst6 t1) / WW Kalp anlk d%r%m bildirimi -tanm aplama"/ * temp ate void #onksi"on-int, do%& e*(P"pe1 !onst6 t1, P"pe1 !onst6 t1)/ WW 'k tipler k%llanlan kalp -tanm aplama"/ * void (0#p)(do%& e, do%& e) , #onksi"on-do%& e, do%& e*/ void (0#p)(int, int) , #onksi"on-int, int* / WW Kalp !"elletirmesi -tanm aplabilir/ * temp ate - * void #onksi"on-!har0, !har0*(P"pe1 !onst6 t1, P"pe1 !onst6 t1) / WW Kalp sn+larnda #riend kalp ilevleri bildirerek aplan kalp bildirimi -a rntlar bir s)nraki b!lmde in&elene&ek/ * #riend void #onksi"on-P"pe1, P"pe1*(deGi2ken er) /

rnek ^Lzm er 14
8ki sa dan b n d!ndren kalp ileviC

BBtemelBmaZ#hpp temp ate -t"pename P* in ine P !onst6 ma'-P !onst6 a, P !onst6 &*< ret%rn a-&X&Ha/ IJJJHK maZ kalp ilevinin bir pr)gramda k%llanmC .in! %de -iostream* .in! %de -string* .in! %de =ma'.hpp? int main( )< int i,87 / stdHH!o%t--?ma'(d, i)H =--HHma'(d, i)--stdHHend / do%& e a1,5.9 / do%& e a1,4F.1 / stdHH!o%t--?ma'(a1, a1)H =--HHma'(a1, a1)--stdHHend / stdHHstring s1,?aritmetik? / stdHHstring s1,?arit? / stdHH!o%t--?ma'(s1, s1)H =--HHma'(s1, s1)--stdHHend / IJJJHK BBktsC maZ-`, i/C G@ maZ-aD, aE/C F#H maZ-sD, sE/C aritmetik BB

14

9%kardaki !rnekte dikkat edilirse her iki deikende a n tip -!rnein ma'(int, int) , ma'(do%& e, do%& e) vs## Ter deikenler +arkl tipte )l%rsa aplmas gerekenlerC ma'(8, 8.9) * BBMM8lk 6 int ikin&i 6 d)%ble# 3'6' alma"#MM 9a"lmas gerekenC

ma'(stati!$!ast-do%& e*(8), 8.9) * BBimdi )ld% =Of]U ve a ma'-do%& e*(8, 8.9) / BB$% da =Of]U $ira"da kavramlar !rnekle akla almC Kalp deikenleriC temp ate -t"pename P* BB6 kalp deikenleridir ar deikenleriC ## ma'(P !onst6 a, P !onst6 &) BB a ve b ar deikenleridir# 'nlk d%r%m saptamasC ma'-do%& e*(8, 8.9) BB6 nin anlk d%r%m% do%& e )larak saptanmtr#

54 (imdi de )k +arkl tipleri ieren karlatrma !"mleri,


kalp bindirimleriC

ani ilev

BBtemelBmaZE#&pp BBiki int deerin b in ine int !onst6 ma'(int !onst6 a, int !onst6 &)< ret%rn a-&X &Ha / I BBherhangi tipte iki deerin b n b%lma temp ate -t"pename P* in ine P !onst6 ma'(P !onst6 a, P !onst6 &)< ret%rn a-&X&Ha/ I BBherhangi tipte deerin b n b%lmak in ine P !onst6 ma'(P !onst6 a, P !onst6 &, P !onst6 !)< ret%rn ma'(ma'(a, &), !)/ I int main( )< HHma'(:, 87, :e) / JJ verili kalp arlr HHma'(:.7, 87.7) / JBmaZ4d)%ble5 arlr -veriden karm aplr/ HHma'()a), )&)) / BBmaZ4&har5 arlr -veriden karm aplr/ HHma'(d, 87) / JBiki int iin kalps" ap arlr HHma'- *(d, 87) / JBmaZ4int5 arlr -veriden karm aplr/ HHma'-do%& e*(d, 87) / BBmaZ4d)%ble5 arlr -veriden karm )k/ HHma'()a), 87.9) / BBiki int iin kalps" ap arlr IJJJHK

84

$aka ararl bir !rnekte de C stringlerini ve maZ ilev bindirimlerini k%llanalm# BBtemelBmaZF#&pp .in! %de -iostream* .in! %de -string* .in! %de -!string* JJherhangi tipte iki deGerin &"Gn &% ma (da"anO a OaGr3) temp ate -t"pename P* in ine P !onst6 ma'(P !onst6 a, P !onst6 &)< ret%rn a-&X&Ha/ I BB8ki C?string in b n b%lmak# -deerle ar/ in ine !har !onst0 ma'(!har !onst0 a, !har !onat0 &)< ret%rn stdHHstr!mp(a, &)-7X&Ha/ I BB3erhangi tipte deerden b n b%lma -da anla ar/ temp ate -t"pename P* in ine P !onst6 ma'(P !onst6 a, P !onst6 &, P !onst6 !)< ret%rn ma'(ma'(a, &), !) / JJma'(a, &), deGer e OaGr3 k% an3rsa cMPM+ I int main( )< HHma'(d, 1F, 89) / JJPamam doGr%. !onst !har0 s1,?se ami? / !onst !har0 s1,?deniz? / !onst !har0 s5,?sema?/ HHma'(s1, s1, s5) / JJ3'6' nk $%nlar C ?string# I

8. BLM

BML;> S;V;aLM[ (temp ate ! ass)


Kalplar, ilevler de )ld%% gibi sn+lar iin de ina edilebilir# Kalp sn+, ! le dnlebilir* +arkl tip verileri !netmesi gereken sn+# C++ pr)gramlarnda kalp sn+lar a gn ekilde k%llanlr* D# kitabm"da er alan sta!k, ve!tor, ad a rntl ekilde ele alnan deT%e veri aplar, kalp sn+lar )larak tanmlanmlardr# Kalp sn+lar sa esinde, alg)ritmalar ve alg)ritmalarda k%llanlan veriler, tamamen birbirlerinden a r alabilir# $elli bir veri tipi "erinde alan belli bir veri apsn k%llanmak iin, kalp sn+ tanmlandnda ve a bildirildiinde, sade&e veri tipinin belirtilmesi eterlidir# -!rnek* sta!k-int* iSta!k / $ira"dan kalp sn+larnn ina edilmesini in&ele e&ei"# $ir bakma kalp sn+lar, nesne !nelimli pr)gramlama ile rekabet eder# $%ras genellikle bir ekilde kalplara ben"er mekani"malarn g!rld erlerdir# )kbiimlilik pr)gram&nn alg)ritma tanmlarn ileri e !telemesini salar# Ksmi )larak % g%lanan alg)ritmalarda ana sn+lardan eni sn+lar treterek, alg)ritmalarda ilenen veriler !n&e tretilmi sn+larda tanmlanarak, ana sn+ta sa+ sanal ilevler )larak tanmlanm )lan elerle birlikte, veriler !netilir# <te andan kalplar ise, veri !"elliklerinin belirlenmesini erteleme e i"in verir, alg)ritmalar ) arada alr# $% en ak ekilde s) %t kaplarda -a&stra!t !ontainer/ g!rlr, alg)ritmalar tam

)larak belirlenir ama a n "amanda, alg)ritmalarda k%llanlan veri tipi tam )larak belirsi" kalr# 7enelde kalp sn+lar k%llanmak k)la dr# 3erhalde int lerin tn )l%t%ran sta!k-int* iSta!k a"mak erine nesne !nelimli aklam k%llanarak * ! ass iSta!k H p%& i! sta!k<JJ eler a"mak daha ")rd%r# <te andan, kalp sn+ ile k%llanlan her +arkl tip iin btn sn+n b% tipe % g%n anlk d%r%m% tespit edilmelidir# Aesne !nelimli aklamla balant k%rarsak b%, ana sn+ta var)lan ilevlerin tretilmi sn+ta k%llanlmasn -k)p alanmasndan "i ade/ andrr#

Ba 3p S3n3# ar3n Pan3m anmas3


$% ksmda kalp sn+larnn inasn anlata&a"# 'slnda )k sa da ararl kalp sn+ sistemlerde mev&%tt%r# $i" b%rada var)lan bir kalp sn+nn nasl ina edilmi )ld%%ndan )k, eni ararl bir kalp sn+nn nasl ina edile&ei "erinde d%ra&a"# (imdi, g!sterge gibi davranan nesne tanmlamam" sala an a%to$ptr sn+n ele alalm# 'slnda b%na &ing!" g!sterge de -smart p)inters/ deri"# $% a%to$ptr sn+nn k%llanlmas sade&e % g%n bellek !netimine i"in verme", a n "amanda g!sterge veri eler k%llanan sn+ nesneleri inas tamamlanamad "aman, bellek kaaklarn engeller# a%to$ptr lerin bir de"avantae vardr* sade&e tek nesneler iin k%llanlabilir ani nesneler di"isine g!sterge iin deil# (imdi bi" a%to$ptr gibi davranan, ama nesne di"isi g!stergelerini !neten SBHHa%to$ptr kalp sn+n ina ede&ei"# Nar)lan bir sn+n k%llanmn balang n)ktas apmak, !nemli bir tasarm prensibini g!sterir* var)lan bir kalptan eni bir kalp -sn+ ve a ilev/ ina etmek, s+rdan kalp ina etme e g!re )k daha k)la dr# $i"im d%r%m%m%"da var)lan m)delimi" stdHHa%to$ptr dir# 'adaki elerin de sn+m"da )lmasn isti )r%"* WW SBHHa%to$ptr sn+nn nesnelerini )l%t%ra&ak ap& ilevler# WW 9k& ilevler#

WW $indirilmi operator,( ) ile&i# WW Nerilen di"i !elerinin tespit ve atamas iin operatorCD ( ) # WW =a antan k%rtarma ile&i -operator0 ( )/ hari&indeki dier btn stdHHa%to$ptr eleri# :ira bi"im SBHHa%to$ptr )k sa da nesne i t%tabilmektedir, b% "den da antan k%rtarma ile&i phe e mahal verme e&ek ekilde tanmlanama"# 7ereken eleri saptadk, artk sn+ ara " ina edilebilir# Kalp sn+larnn tanm, a n kalp ilevlerin de )ld%% gibi, temp ate anahtar kelimesi ile balar# =aha s)nra al a ralar iinde b%l%nan kalp tip -ve a tipi )lma an/ deikenlerinin listesi takip eder# $% liste b) deildir# temp ate anahtar kelimesini takip eden al a ralar arasnda iaretlenmi liste C++ dilinde temp ate ilandr# $a" d%r%mlarda deiken listesi b) )labilir, ve sade&e iaretli a ralar b%l%n%r# Sn+ ara " kalp ilann takip eder, ve b%rada ekli kalp tip deiken adlar sabit ve tipleri g!sterirler# Sn+ ara " her "amanki gibi ina edilir# ! ass anahtar kelimesi ile balar ve n)ktal virgl ile biter# Kalp sn+ ilevleri ve kalp sn+ ap& ilevleri ina edilirken, n)rmal tasarm gerekleri erine getirilir* kalp sn+ tip deikenlerini P"pe erine P"pe !onst6 )larak tanmlamak ter&ih edilir# $! le&e b k veri aplarnn gereksi" k)p alanmas engellenmi )l%r# Kalp sn+ ap& ilevleri, ap& ilev g!vdesinde e atamak erine, e balat&lar k%llanmak gerekir, b% bileik nesnelere ikili atamalar engeller# $! le&e nesne varsa lan ap& bir ke" k%llanr, ve atamann kendisi bir ke" aplr# 8te btn eleri birlikte SBHHa%to$ptr sn+m"n ilk srm* namespa!e SB< temp ate -t"pename Uata* ! ass a%to$ptr< Uata0 d$data / p%& i!H a%to$ptr( ) H d$data(7)< I a%to$ptr(a%to$ptr-Uata* 6other)< !op"(other) / I a%to$ptr(Uata0 data)<

H d$data(data)< I Ka%to$ptr( )< destro"( ) / I a%to$ptr-Uata* 6operator,(a%to$ptr-Uata* 6rva %e) / Uata 6operator CD (%nsigned inde')< ret%rn d$dataCinde'D / I Uata !onst6 operator CD (%nsigned inde') !onst< ret%rn d$dataCinde'D / I Uata0 get( )< ret%rn d$data / I Uata0 !onst get( ) !onst< ret%rn d$data / I Uata0 re ease( )/ void reset(Uata0) / privateH void destro"( ) < de ete CD d$data / I void !op"(a%to$ptr-Uata* 6other)< d$data( ),other.re ease( ) / I Uata6 e ement(%nsigned id') !onst / I/ I Sn+ ara "nn !"ellikleri %nlardr* WW Kalp tipi Uata n)rmal tip )larak kab%l edilirse, sn+ ara "nn herhangi !"el bir karakteristii hi )lma"# Sade&e eski tip sn+ ara " gibi g!rnr# $% da genellikle d)r%d%r# Kalp sn+lar, bir ve a iki basit tip iin ina edilmi sn+tan s)nra )k daha k)la ina edilebilir# S) %tlama evresini takiben gerekli btn veri tiplerinin karlklar kalpl veri tiplerine evrilirler, ve b%nlar kalbn tip deikenleri )l%r#

WW =aha a rnt a girersek, ba" !"el karakteristiklerde a rdedilir# Sn+ k)p a ap& deikenleri ve bindirilmi atama ileleri basit a%to$ptr nesnelerine deil a%to$ptr-Uata* nesnelerine da an )l%r# Kalp sn+ nesneleri -ve a da anlar ve a g!stergeleri/ her "aman belirlenmi kalp tip deikenlerine gerek d% ar# WW K)p a ap&larn ve bindirilmi atama ilelerin standart tasarmndan +arkl )larak* deikenleri !onst )lma an da anlardr# $%, kalp sn+ )larak sn+la apla&ak bir e e sahip deildir# 'ma a%to$ptr tasarmnn kendisinin s)n%&%d%r# 3em k)p a ap& ilev hem de bindirilmi atama ile&i, !tekinin nesne g!sterge&ini alr# 9ani !teki nesne i @ -s+r/ g!sterge&e evirir# WW A)rmal sn+larda )ld%% gibi eler satrii -in ine/ )larak tanmlanabilir# 'slnda btn kalp sn+ eleri satrii -in ine/ )larak tanmlanmak ")r%ndadr# <nderlemeli kalplar halen desteklenmemektedir# < le de )lsa tanm, sn+ ara "n iine ve a sn+ ara "n dna - ani takiben/ k)n%r# 'na k%ral )larak* basit sn+larda )ld%% gibi a n tasarm prensipleri % g%lanmas gerekir# 'ma b% se+er, ara " )k%nabilirlii temel amatr# 'ra "deki %"%n % g%lamalar ara " belirsi" hale getirir# WW Kalp sn+ nesnelerinin anlk d%r%m% tespit edildii "aman, k%llanlan btn kalp e ilev tanmlar, derle i&i tara+ndan g!rlmek ")r%ndadr# 3er tanmn a r kalp ilev tanm d)s asnda sakland ere kalp karakteristikleri erletirilebilmelerine ramen, ) )l hep )k ")rd%r, -derleme i h"landrsa bile/# $%n%n erine, kalp sn+lar tanmlamann klasik )l%* ara " tanm, ba" ilevleri satrii -inline/ tanmlama, ve geri kalan kalp ilevleri ara "n hemen altnda tanmlamaktr# WW =a antan k%rtarma ile&i -operator0( )/ annda herkesin bildii operator CD ( ) e i+ti tanmlanr# Sn+ nesne di"ilerinin b) %t% hakknda bilgi sahibi )lmadnda, b% eler di"i snrlar hakknda denetleme apama"# (imdi sn+ ara "nn !tesinde tanmlanan ba" e ilevleri in&ele elim# WW !op"( ) ve destro"( ) ilevleri g!sterge e sahibi sn+larn standartlamasn tevik ama& ile % g%lama a eklenmiti# $% eler )k basittirler#

WW $indirilmi atama ap& ilevi, hala kendiliinden atama iin denetleme apmak ")r%ndadr# 'ra " dnda tanmlandnda % g%lama aadaki gibi )l%r* namespa!e SB< temp ate -t"pename Uata* a%to$ptr-Uata* 6a%to$ptr-Uata*HHoperator,(a%to$ptr-Uata* 6rva %e)< i#(this+,6rva %e)< destro"( ) / !op"(rva %e) / I ret%rn 0this / I I ?? $%, asl kalp tanmdr# 6anm )ld%% iin m%tlaka temp ate anahtar kelimesi ile balamaldr# 8lev bildirimi de m%tlaka temp ate ile balamaldr# 'ma ) ara "n kendisi tara+ndan ima edilmitir, ani taa en banda gereken kelime er alr# ?? $tn )l%t%r%lan a%t)Sptr tip kalbn tip deikenini ierir# $% bir me&b%ri ettir# WW release- / ve reset- / elerinin % g%lamalar )ld%ka basittir# 8te )nlar* namespa!e SB< temp ate -t"pename Uata* Uata0 a%to$ptr-Uata*HHre ease( )< Uata0 ret,d$data / d$data,7/ ret%rn ret / I temp ate -t"pename Uata* void a%to$ptr-Uata*HHreset(Uata0 ptr)< destro"( ) / d$data,ptr / I I (imdi sn+ tanmland, artk k%llanlabilir# Sn+ k%llanmak iin, m%tlaka

)n%n nesnesinin belli bir veri tipi iin anlk d%r%m% saptanmaldr# <rneimi"* eni bir stdHHstring di"isi tanmlamaktadr# $tn k)m%t satr verilerini saklar# =aha s)nra ilk k)m%t satr verisi a"drlr# $ir s)nraki admda a%to$ptr nesnesi, a n tipteki baka bir a%to$ptr i balatmak iin k%llanlr# 8lk a%to$ptr imdi @? g!stergei, ikin&i a%to$ptr ise k)m%t satr verilerini t%tt%% g!rlr# .in! %de -iostream* .in! %de -string* .in! %de -a gorithm* .in! %de =a%toptr.h? %sing namespa!e std / int main(int arg!, !har00 argv)< SBHHa%to$ptr-string* sp(ne( stringCarg!D) / !op"(argv, argv+arg!, sp.get( )) / !o%t--?i k a%to$ptr, program ismiH =--spC7D--end / SBHHa%to$ptr-string* se!ond(sp) / !o%t--?i k a%to$ptr, pointer degeriH =--sp.get( )--end / !o%t--?ikin!i a%to$ptr, program ismiH =--se!ondC7D--end / SBHHa%to$ptr- * iap(ne( intC17D) / !o%t--iapC7D--end / ret%rn 7 / IJJJHK BBktC ilk a%t)Sptr, pr)gram ismiCa#)%t ilk a%t)Sptr, p)inter degeriC @ ikin&i a%t)Sptr, pr)gram ismiC a#)%t BB

Aarsa"3 an Ba 3p S3n3# UeGi2ken eri


Kalp ilevlerinden +arkl )larak kalp sn+larnda kalp deikenlerine varsa lan deerler verilebilir# $%, hem kalp tipi )lan hem de kalp tipi )lma an deikenler iin d)r%d%r# Ter bir kalp sn+nn deikenlerinin kalp verileri belirlenmeden anlk d%r%m% saptanrsa, ve eer varsa lan deikenler tanmlanmsa, ) "aman varsa lanlar k%llanlabilir# $% tr varsa lanlar belirlerken akln"da b%l%nmas gereken* sn+ anlk d%r%mlarnn )%na varsa lanlarn % g%n )lmasdr# <rnek )larak

SBHHa%to$ptr kalp sn+na, kalp tip deiken listesinde int varsa lan )larak atanr# temp ate -t"pename Uata,int* Narsa lanlar belirlenmi )lsa bile, derle i&i kalbn nesne tanmlar ile ilgili m%tlaka bilgilendirilmi )lmaldr# $! le&e tanmlanm varsa lan deiken deerleri iin kalp sn+ nesnelerinin anlk d%r%mlar tespit edildii "aman tip !"ellikleri atlanabilir, ama iaretli a ralar kalr# $! le&e SBHHa%to$ptr sn+ iin bir varsa lan tip kab%l edilerek, sn+ nesnesi aadaki gibi tanmlanr* SBHHa%to$ptr- * intM%to>tr / Sn+ ara "nn dnda tanmlanm kalp eleri iin hi bir varsa lan belirlenmemelidir# Kalp ilevleri, hatta kalp e ilevleri, varsa lan deiken deerlerini belirle eme"# $! le&e !rnein* re ease( ) esi her "aman a n kalp !"ellii ile balar* temp ate -t"pename Uata* $ir kalp sn+ )k sa da kalp deikeni k%llanrsa, hepsine varsa lan deerler verilir# $%n%nla birlikte, varsa lan ilev verileri gibi, bir ke" varsa lan deer k%llanlr, btn geri kalan deikenler m%tlaka kendi varsa lan deerlerini k%llanrlar# Kalp tip !"ellik listesi virglle balamamaldr, ne de )k sa da ardk virglle#

Ba 3p S3n3# ar3n3n Bi dirimi


Kalp sn+larn bildirmekte mmkndr# $% d%r%mlar ilerde sn+ bildirimleri gerektii "aman ararl )l%r# $ir kalp sn+n bildirmek iin, ara " -"in&irli a ralar arasndaki ksm/ n)ktal virglle er deitirir# namespa!e SB< temp ate -t"pename P"pe* ! ass a%to$ptr / I $%rada varsa lan tipler a r&a belirlenir# $%n%nla birlikte, varsa lan tip

deerleri, hem kalp sn+ tanmnda hem de kalp sn+ bildiriminde a n anda belirtileme"# $%rada temel k%ral* varsa lan deerlerin bildirimlerden karlmas la"m geldiidir, nesnelerin anlk d%r%mlar saptanrken kalp sn+ bildirimleri hi bir "aman k%llanlma", ama sade&e ileride k%llanla&ak )lan % g%n da anlar hari# $%rada hemen %n% belirtelim* b%, basit sn+lardaki e ilevlerin varsa lan deiken !"elliklerinden +arkldr# $% tr varsa mlar e ilevlerin bildirimlerinde belirtilmelidir, tanmlarnda deil#

fek i s3n3#4tip erin "e Ae Pip erini M"3rdetme


Kalp tip ad bir tipe denk geldii iin, kalbn tip ad a r&a bi""at kalbn kendisine ve a sn+a karlk gelir# (imdi kalp tip deikeni )larak t"pename Container alan cand er kalp sn+n ele alalm, ve veri elerini sakla an da kabn &egin( ) inele i&isi -.iterat)r/ )ls%n# Kalp sn+ cand er n ap& ilevi, herhangi bir kabn -.&)ntainer/ destekledii &egin( ) esini kab%l edi )r# O "aman 3andler kalp sn+m"n iskeleti * temp ate -t"pename Container* ! ass cand er< ContainerHH!onst$iterator d$it / p%& i!H cand er(Container !onst6 !ontainer) H d$it(!ontainer.&egin( )) <I I/ $% sn+ tasarlarken neleri dikkate aldkQ# WW t"pename Container inele i&ileri destekle en herhangi bir kab -.&)ntainer/ g!sterir# WW Kap b k ihtimalle &egin( ) e ilevini destekler# d$it(!ontainer.&egin( )) ilk deer atamas -.balatmas/ ak biimde kalbn tip deikenlerine baldr# $% "den sade&e basit ekilde, a"m biiminin d)r%l%% bakmndan snanr# WW $en"er ekilde, b k ihtimalle kap, Container sn+nda tanmlanan !onst$iterator tipini destekler# Container !onst da an )ld%% iin, &egin( ) tara+ndan d!ndrlen inele i&i basit inele i&i )lma p

!onst$iterator d%r# 'adaki main( ) ilevini k%llanarak cand er kalp sn+nn anlk d%r%m%n% saptama a kalktm" da, hatalarla karlar"* .in! %de -ve!tor* .in! %de =hand er.h? %sing namespa!e std / int main( )< ve!tor-int* vi / >aircand er-ve!tor-int* * ph(vi) / IJJJHK BB]ep)rted Trr)rC handler#hCGCerr)r Cs ntaZ err)r be+)re ,*, t)len BB $%n%n anlam, aadaki satr s)r%n aratmtr* ContainerHH!onst$iterator d$it / S)r%n %d%r* kalp tip deikenlerini k%llanrken, basit a"m biim denetimi, derle i&inin bir !ontainer n bir Container e karlk geldiine karar vermesini sala a&aktr# $! le bir Container, &egin( ) e ilevini ga et i i destekler, b% "den !ontainer.&egin( ) de a"m biimi bakmndan herhangi bir s)r%n )lma"# $%n%nla birlikte, &egin( ) esi !"el bir Container tipi iin aslnda )kt%r# Tlbette &egin( ) esinin varl sade&e Container in asl tipi belirlendii anda bilinir# <te andan, derle i&i ContainerHH!onst$iterator %n ne )ld%%n% belirle eme"# '&a ip bir Container esi )ld%% dnlr, a"mla ilgili basit denetim )l%ml% s)n% verme"# 9ani !onst$iterator Container esi )ld%% sre&e aadaki a"m biimi her "aman hataldr* ContainerHH!onst$iterator d$it/ $ilindii gibi derle i&i _HHa a _ nn esidir di e alr# 'adaki 3andler ap& ilev % g%lamasn k%llanarak main- / ilevini derlersek g!rlen hata iletisi devamnda b%l%nmaktadr# >aircand er(Container !onst6 !ontainer) H

d$it(!ontainer.&egin( )) < %nsigned ',ContainerHHios$end / I BB]ep)rted err)rC err)rC ,i)sSend, is n)t a member )+ t pe ,stdCCve&t)r4int, stdCCall)&at)r4int5 5, BB $%na ben"er d%r%mlarda, C)ntainer gibi sn+larda, tip aka derle i&i e bildirilmelidir, b% da t pename anahtar kelimesi ile gereklenir# (imdi t pename kelimesi ile 3andler sn+n eniden a"alm* temp ate -t"pename Container* ! ass cand er< t"pename ContainerHH!onst$iterator d$it / p%& i!H cand er(Container !onst6 !ontainer) H d$it(!ontainer.&egin( )) <I I/ Thh artk derleme de herhangi bir s)r%n kma"#

Pipi ` ma"an UeGi2ken er


Kalp ilevlerinde g!rdm" gibi, kalp deikenleri a kalp tip deikenleridir, a da kalp tipi )lma an deikenlerdir# Kalp sn+lar tipi )lma an deikenleri de tanmlar# Kalp ilevlerinde k%llanlan sabit )lma an deikenlere ben"er ekilde, b% tipi )lma an deikenlerin deerleri, nesnenin anlk deeri saptand esnada belirlenen sabitler )lmaldr# $%ndan baka, derle i&i, deerleri, verileri ap& ileve aktararak elde edeme"# <rnek )larak imdi SBHHa%to$ptr kalp sn+nn ilaveten, tipi )lma an %nsigned Size adnda deikeni )ld%%n% kab%l edelim# =aha s)nra Size deikenini, Uata tipinin Size !eli di"isini tanmlamak iin ap& ilevde, )n%n deikeni )larak k%llanalm# 9eni SKCCa%t)Sptr kalp sn+ aadaki gibi )l%r*

namespa!e SB< temp ate -t"pename Uata, %nsigned Size* ! ass a%to$ptr< Uata0 d$data / %nsigned d$n / p%& i!H a%to$ptr(a%to$ptr-Uata, Size* 6other)< !op"(other) / I a%to$ptr(Uata10 data) H d$data(data), d$n(7) <I a%to$ptr(Uata !onst (6arr) CSizeD) H d$data(ne( Uata1CSizeD), d$n(Size) < stdHH!op"(arr, arr+Size, d$data) / I .... I/ IJJJHK Uaalelese+ eni k%rg%m%" ihti alarm" gidereme"# :ira derle i&i kalbn tipi )lma an deikenlerin deerlerini belirle eme"# =erle i&iden aadaki main( ) ilevini derlemesi istendiinde, gereken kalp deiken sa s ile asl sa arasndaki % %ms%"l%k bilgi n)t% )larak iletilir# 9ani d)r% derleme )lma"# int main( )< int arrC57D / SBHHa%to$ptr-int* ap(arr) / IJJJHK BBTrr)r rep)rted b the &)mpilerC On +%n&ti)n ,int main- /,C err)rC kalp verilerinin hatal sa s - D erine E )lmal/

err)rC ,template4&lass =ata, %nsigned int Si"e5 &lass SKCCa%t)Sptr, iin saland# BB-aklamalar trke a"ma ter&ih ettik#/ Size varsa lan deere sahip tipi )lma an deikenler arasna k)nsa bile, ine alma"# $aka trls aka belirtilme"se, derle i&i varsa lan k%llanr# $aka ekli bilinme"se Size,7 )l%r, b% "den %karda ki main( ) ilevindeki arr di"isinin asl b kl ile, varsa lan 7 deeri arasnda % %ms%"l%k )rta a kar# Narsa lan deeri k%llanan derle i&i aadaki hata bilgisini iletir* ;n instantiation o# )SBHHa%to$ptr-int, 7*) H ... errorH!reating arra" (ith size zero ()7)) $! le&e kalp sn+, tipi b%l%nma an deikenler k%llanmasna ramen , )nlar m%tlaka sn+ nesnelerinin tanmlandnda ki tip deikenlerinde )ld%% gibi, belirlenmek ")r%ndadr# Narsa lan deerler tipi )lma an deikenler iin belirlenebilir, ama ) "aman varsa lan, tipi belli )lma an deiken !"ellii belirtilmeden brakldnda k%llanlr# 9ap& ilevi ara "n dnda tanmlama alma"# 'ra "n dna erletirilmi )lsa da hala a n kalp ilevidir# $%rada !"ellikle belirtmemi" gereken* kalp e ilevleri ara "n dnda tanmland "aman, varsa lan kalp tip -tipsi"/ deikenleri k%llanlma"# Kalp ilevlerine -d)la s ile kalp sn+ e ilevlerine/ varsa lan kalp tip -si"/ deiken deerleri verilme" Kalp ilevlerinin tipi )lma an deikenleri gibi, kalp sn+larnn tipi )lma an deikenleri de sade&e sabitler )larak belirtilebilir# WW Sabit adresleri )lan gl)bal deikenler tipi )lma an deikenelr iin veri )larak k%llanlabilir# WW 9!rel ve dinamik )larak bellee erletirilmi )lan deikenlerin adresleri, ka nak k)d derlendii "aman derle i&i tara+ndan bilinme"# $%ndan d)la b% adresler tipi )lma an deikenler iin veri )larak k%llanlama"# WW S)l an -Lva %e/ d!nmlerine i"in verilir* bir g!sterge tipi )lma an deiken )larak tanmlanrsa, bir di"i ad belirtilir# WW Aitelik evrimlerine i"in verilir* sabit )lma an nesne e bir g!sterge, &)nst g!sterge )larak tanmlanm tipi )lma an deikenle k%llanlabilir# WW 6er+ilere i"in verilir* daha ksa veri tipinin sabiti, daha geni tipin tipi

)lma an deiken !"ellii iin k%llanlabilir# -!rnek int arldnda erine short, do%& e arldnda ong k%llanlabilir#/ WW $tnle en evrimlere i"in verilir* %nsigned deiken belirtilirse, bir int de k%llanlr# WW =eikenler -variables/, kalp tipsi" -tipi )lma an/ deikenlerini -parameters/ belirlemekte k%llanlama", eer deerleri sabit aklamalar deilse tabii# $%n%nla birlikte !onst k%llanarak tanmlanm deikenler ise, deerleri hibir "aman deimedii iin k%llanlabilir# Neri )larak di"i kab%l eden SBHHa%to$ptr sn+nn ap& ilevini tanmlama a almam"a ramen, ap& ilev k)d%nda di"i b) %t%n% k%llanma i"ni )kt%r, ama hen" seenekler bitmi deil# 'rtk bir s)nraki b!lmde ama&m"a varmak iin baka bir aklam k%llana&a"#

"e Ba 3p ar
<n&eki b!lmlerde tipi )lma an -.tipsi"/ deikenli kalplar tanmlama ga retlerimi", derle i&i tara+ndan di"i !elerinin sa s ile balatma esnasnda, baars"lkla s)n%lanmt# :ira ap& ilev arld "aman, kalp deikenleri gi"li )larak b%l%n%p karlama", ani kalp sn+nn nesnesi tanmland "aman, )nlar ak )larak belirtilmelidir# 9ap& ilev arlmadan hemen !n&e kalp deikenleri belirtildiinde, karm apla&ak herhangi bir e kalma", ve derle i&i ak biimde belirtilmi )lan kalp verilerini k)la bir ekilde k%llanr# <te andan kalp ilevleri k%llanld "aman, ilev arldnda k%llanlan veriler sa esinde asl kalp deikenleri elde edilir# $% aklam bi"im s)r%n%m%"% halletmemi" iin bir )l aar# Ter ap& ilevin kendisi kalp ilevinin kendisine e aplrsa, ) "aman kalp sn+ tipi )lma an deikenleri aka belirtmemi"e gerek kalmaks"n, derle i&i tipsi" -.tipi )lma an/ deikenlerin deerlerini sapta abilir# Kendileri kalp )lan kalp sn+nn e ilevlerine -ve a sn+lar/, "e ka 3p ar ad verilir# ; e kalplar a n !teki kalplara ben"er ekilde tanmlanrlar, ani temp ate -t"pename ....* bal ile gibi# <n&eki SBHHa%to$ptr(Uata !onst (6arra") CSizeD) ap& ilevi e kalbna evrilirken, kalp sn+nn Uata tip deikeni k%llanlr, ama e kalb m%tlaka kendisinin tipsi" -tipi )lma an/ deikeni ile birlikte )lmaldr# 9ap& ilevin satrii a"m aadaki gibi )l%r* temp ate -%nsigned Size*

a%to$ptr(Uata !onst (6arr)CSizeD) H d$data(ne( UataCSizeD), d$dn(Size) < stdHH!op"(arr, arr+Size, d$data) / I ; e kalplarn !"ellikleri aadaki verilmitir* WW A)rmal eriim k%rallar % g%lanr* genel pr)gram tara+ndan k%llanlabilen ap& ilev, verilen bir veri tipinin SBHHa%to$ptr nesnesini ina eder# ' n kalp sn+larnda )ld%% gibi, veri tipi m%tlaka nesne ina edildii "aman belirtilmelidir# int arra"C87D di"isinden bir SBHHa%to$ptr nesnesi ina etmek iin apa&am" tanm* SBHHa%to$ptr-int* o&Qe!t(arra") / WW Sade&e ap& ilev deil, herhangi bir e de e kalp )larak tanmlanabilir# WW Kalp eler, satrii -in ine/ )larak ve a sn+ dnda tanmlanabilir# Sn+n aasnda e tanmland "aman, kalp sn+n deiken listesi m%tlaka kalp enin kalp ilev deiken listesinden !n&e gelmelidir# <rnek* temp ate -t"prename Uata* temp ate -%nsigned Size* a%to$ptr-Uata*HHa%to$ptr(Uata !onst (6arr)CSizeD) H d$data(ne( UataCSizeD), d$n(Size) < stdHH!o%t--?sa&it diziEn? / stdHH!op"(arr, arr+Size, d$data) / I Kalp esi, sn+nn altnda tanmland "aman* ?? 6anm, % g%n isimalan )rtamnda aplmaldr# $%ndan d)la ,

isimalannda kalp sn+larn tanmla an d)s alarn d"eni* namespa!e SomeVame< temp ate -t"pename P"pe, .... * JJka 3p s3n3# tan3m3 ! ass C assVame< .... I/ temp ate -t"pename P"pe, .... * JJsat3riOi o ma"an "e tan3m3 ( ar3) C assVame-P"pe, ......*HHmem&er(.....)< ........... I IJJJHK JJisimalan kapatld ?? 8ki tane kalp ilan edilmelidir* <n&e kalp sn+nn kalp ilan aplmaldr, daha s)nra e kalbn kalp ilan aplr# ?? 6anmn kendisi, e kalbn % g%n g!rntsn belirlemelidir* e kalp, ekli kalp deiken tipi Uata iin anlk d%r%m% saptanm SBHHa%to$ptr sn+nn esi )larak tanmlanr# SK isimalan iinde b%l%n%ld%% iin ilev bal* a%to$ptr-Uata*HHa%to$ptr ile balar ?? ; e kalplar, sn+larnn altnda tanmland "aman, % g%lama ve bildirimde er alan ekli kalp deiken adlar a n )lmak ")r%ndadr# (imdi hala kk bir s)r%n kald# Sabit b klkteki bir di"iden SBHHa%to$ptr nesnesi ina ederken, %kardaki ap& ilev k%llanlma"# On%n erine SBHHa%to$ptr-Uata*HHa%to$ptr-Uata0 data* ap& ilevi harekete geirilir# (imdiki eni ap& ilev, e kalp deildir, SBHHa%to$ptr sn+nn )k !"el bir ap& ilev srmdr# 3er iki ap& ilev de di"i kab%l ettii iin, derle i&i a%to$ptr(Uata !onst (6arra")CSizeD den "i ade a%to$ptr(Uata0) arr# $% kk s)r%n da, e kalptaki a%to$ptr(Uata0 data) ap& ilevi basit ekilde deitirilerek halledilir# $! le apldnda, kalp tip deikeni Uata )l%r# Kalan kk a rnt ise, ani e kalplarn kalp deikenleri, sn+larnn kalp deikenlerini g!lgeleme"# Uata adnn Uata1 )larak eniden adlandrlmas b% in&elie ardm& )l%r# (imdi a%to$ptr(data0) ap& ilevinin -satrii/ tanmn verelim, her iki ap& ilevin

k%llanld main( ) !rneine de bakabilirsini"* temp ate -t"pename Uata1* a%to$ptr(Uata10 data) H d$data(data), d$n(7) <I JJbellee dinamik )larak erletirilmeli

BB3er iki ap& ilevi aran main( )* int main( )< int arra"C87D / SBHHa%to$ptr-int* ap(arra") / SBHHa%to$ptr-int* ap1(ne( intC87D) / ret%rn 7 / IJJHK

Stati! Aeri "e er


Kalp sn+larnda stati! veri eleri tanmland "aman, her eni anlk d%r%m iin anlk d%r%m tespit edilir# ' n kalp tipinin -ve a tiplerinin/ )k sa da nesnesi tanmlandnda, eler stati! ise, b%na % g%n sade&e bir e b%l%n%r# <rnek )larak aadaki sn+ ele alalm* temp ate -t"pename P"pe* ! ass C assMe< stati! int s$o&Qe!tsa" / I/ 3er !"el tip iin sade&e bir tane C assMe-P"pe*HHs$o&Qe!tsa" b%l%n%r# $%nla birlikte aada, +arkl nesneler&e b!llen sade&e bir stati! deikenin anlk d%r%m% saptanr# C assMe-int* C assMeBir/ C assMe-int* C assMe;ki / stati! eleri ara "de )l%t%rma, b% elerin aslnda tanmland anlamna gelme"* sade&e sn+lar tara+ndan bildirilmi )l%r, m%tlaka baka

bir erde tanmlanmaldr# stati! eleri b%l%nan kalp sn+lar iin de, b% d%r%m deiik deildir# stati! elerin tanmlar genellikle hemen kalp sn+ ara "n takip eder# s$o&Qe!tsa" stati! esi aadaki gibi tanmlanr, ani hemen sn+ ara "nn altnda* temp ate -t"pename P"pe* int C assMe-P"pe*HHs$o&Qe!tsa",7 / BBara den hemen s)nra BBtanm aplr

9%kardaki d%r%mda s$o&Qe!tsa" int )l%p, kalp tip deikeni P"pe dan bams"dr# Liste ben"eri inaatlarda, sn+ nesne g!stergelerinin kendilerinin gerektii erlerde, stati! deikeni tanmlamak iin kalp tip deikeni P"pe m%tlaka k%llanlmaldr# 'adaki !rnee bakalm* temp ate -t"pename P"pe* ! ass C assMe< stati! C assMe0 s$o&Qe!t>tr / I/ temp ate -t"pename P"pe* C assMe-P"pe*0 C assMe-P"pe*HHs$o&Qe!t>tr,7 / 3er "amanki gibi tanm, deiken adndan geri e tanmn balang&na d)r% )k%n%r* C assMe-P"pe* sn+nn o&Qe!t>tr si C assMe-P"pe* n nesnesine g!stergetir# S)n% )larak* kalp tip deikeninin stati! deikeni tanmland "aman, d)al )larak ilk deerinin s+r -@/ )lmamas la"mdr# Narsa lan ap& ilev daha % g%nd%r -b%rada P"pe( )/ * temp ate -t"pename P"pe* BBsSt pe n tanm P"pe C assMe-P"pe*HHs$t"pe,P"pe( ) /

Sapm32 Pip er ]Oin Ba 3p S3n3# ze e2mesi


SBHHa%to$ptr sn+ )k sa da +arkl tip iin k%llanlabilir# $%nlarn )rtak !"ellii, sn+n d$data esine basit biimde atanabilmeleridir# <rnek* a%to$ptr(Uata0 data) gibi# $%n%nla birlikte b% i her "aman g!rnd kadar basit deildir# Uata nn asl tipi !har0 )l%rsa ne )l%rQ# !har00 !rneklerinde )ld%% gibi, data nn s)n% tipi, i i bilinen* main( ) ilevinin

argv ve env, !rnek* !har00 deikenleri# $% !"el d%r%mda bi" sn+n d$data esine ap& ilevin sr+ eniden atanmas ile ilgilenme i"# $tn !har00 apsnn k)p alanmas ile ilgileniri"## $%n% gereklemek iin, kalp sn+ !"elletirmesi k%llanlr# Kalp sn+ !"elletirmesi, belli bir asl kalp deiken tipi iin, kalp e ilevlerin k%llanlamad -ve a k%llanlmas gerekme en/ erlerde k%llanlr# $% d%r%mlarda asl tipin !"el ihti alarn gideren, !"elletirilmi kalp eleri ina edilebilir# Kalp sn+ e !"elletirmeleri, var)lan sn+ elerinin !"ellemesidir# Sn+ eleri b%l%nd%% iin, !"elleme sn+ ara "nn bir paras )lma"# =aha "i ade b%nlar, eler )larak ara "den s)nra tanmlanrlar# 'ka tipleri belli edilerek eler eniden tanmlanr# $%nlara ek )larak var)lan sn+ !"elliklerindeki gibi, ilev !ntipleri !"ellikleri iin e ilevlerin !ntipleri tam )larak ilev !ntiplerine % g%n )lmaldr# 'adaki tanm Uata,!har0 !"ellemesi iin tasarland# temp ate - * a%to$ptr-!har0*HHa%to$ptr(!har00 argv) H d$n(7) < !har00 tmp,argv / (hi e(0tmp++) d$n++ / d$data,ne( !har0 Cd$nD / #or(%nsigned id',7 / id'-d$n / id'++)< stdHHstring str(argvCid'D) / d$dataCid'D,str!p"(ne( !harCstr. ength( )+1D, str.!$str( )) / I I 9%kardaki !"elletirme, aadaki SBHHa%to$ptr nesnesini )l%t%rmak iin k%llanlr* int main(int arg!, !har00 argv)< SBHHa%to$ptr-!har0 * ap5(argv) / ret%rn 7/ I Kalp e !"elleme tanm, erine g!re istisnai tipin k%llanlmasn

salamasna ramen, tek kalp e !"ellemesinin eterli )lmad d%r%mlar mmkndr# $% d%r%mlardan biri* !har0 !"ellemesi srasnda, !"ellemi tip Uata,!har0 iin, kalbn destro"( ) % g%lamasnn d)r% )lmamasdr# 9ani, )k sa da e belli bir tip iin !"elletirildiinde, an&ak ) "aman tam bir kalp sn+ !"ellemesinden s!" edilebilir# 6amamen !"ellemi bir kalp sn+ aadaki karakteristikleri tar* WW Kalp sn+ !"ellemesi kalp sn+ tanmn i"ler# $%nlarn hepsinden !te e, derle i&i !"ellemi )lann ne )ld%%n% g!rebilmelidir ki, !"elleme )ls%n# WW $tn kalp sn+ deikenlerine belli tip adlar verilir, ve a -tipi )lma anlar iin/ belli deerler verilir# $% belli deerler ak biimde kalp deiken !"ellik listesinde er alr, ani, kalp sn+ adn i"le en a ralar arana k)n%r# WW 6emel kalp tanmnda k%llanlan temel kalp deikenlerindeki !"ellemi tip ve deerleri, !"ellemi kalp elerinin tamam belirler# WW Kalp elerinin tamam tanmlanmak ")r%nda deildir, ama, !"ellemenin genelliini gven&e e almak iin tanmlanmas daha i i )l%r, ani tanmlanmas la"mdr# Ter bir e !"elleme dnda t%t%l%rsa, ) e !"ellemi tip ve a tipler iin k%llanlama"# WW <"ellemede, ek elerde tanmlanabilir# $%n%n annda, temel kalpta da tanmlanan ek elerin, m%tlaka temel kalp sn+ tanmnda karlk eleri de -a n !ntipleri k%llanarak, temel kalp deikenleri k%llanlsa da/ b%l%nmaldr# Tk elerin tanmn derle i&i s)r%n apma", ve a r&a si"in elere ait !"ellemi kalp sn+ nesnelerini k%llanman"a i"in verir# WW <"ellemi kalp sn+larnn e ilevleri, a )nlarn !"ellemi sn+larnda tanmlanr ve a !"ellemi sn+nda bildirilir# Sade&e bildirilmilerse, tanmlar !"ellemi kalp sn+ ara "nn altnda verilmesi la"mdr# $! le bir % g%lama temp ate - * ile bala ama", ama hemen e ilevin bal ile balamaldr# 'ada SBHHa%to$ptr kalp sn+nn Uata,!har0 tipi iin tam !"ellemi halini veri )r%"* !"elletirme temel kalp sn+n ieren d)s a a eklenir# Sade&e bildirilmi )lan !rnek elerin b) %t%n% kltmek iin, temel kalpta k%llanld gibi, a n % g%lamalara sahip )ld%klar kab%l edilir#

.in! %d -iostream* .in! %de -a gorithm* .in! %de =a%to$ptr1.h? namespa!e SB< temp ate - * ! ass a%to$ptr-!har0 *< !har00 d$data / %nsigned d$n / p%& i!H a%to$ptr-!har0 *( ) H d$data(7), d$n(7) <I a%to$ptr-!har0 *(a%to$ptr-!har0 * 6other)< !op"(other) / I a%to$ptr-!har0 *(!har00 argv)< #% $!op"(argv) / I JJtemp ate-%nsigned Size * JJa%to$ptr(!har0 !onst (6arr) CSizeD) Ka%to$ptr( )< destro"( ) / I a%to$ptr-!har0 * 6operator,(a%to$ptr-!har0 * 6rva %e) / !har06 operatorCD(%nsigned inde') / !har0 !onst6 operatorCD(%nsigned inde') !onst / !har00 get( ) / !har0 !onst0 get( ) !onst / !har00 re ease( ) / void reset(!har00 argv)< destro"( ) / #% $!op"(argv) / I void additiona ( ) !onst JJimdi p%bli& bir ek e <I privateH void #% $!op"(!har00 argv)< d$n,7 /

!har00 tmp,argv / (hi e(0tmp++) d$n++ / d$data,ne( !har0 Cd$nD / #or(%nsigned id',7/ id'-d$n/ id'++)< stdHHstring str(argvCid'D) / d$dataCid'D,str!p"(ne( !harCstr. ength( )+1D, str.!$str( )) / I I void !op"(a%to$ptr-!har0 *6 other) / void destro"( ) / JJ% g%lama apld I/ void a%to$ptr-!har0 *HHdestro"( )< (hi e(d$ng) de ete d$dataCd$nD / de ete CD d$data / I I

B3smi ze e2tirme er
<n&eki b!lmde kalp sn+ !"elletirmelerinin mmkn )ld%%n% g!rdk# 7!rldki, hem kalp sn+ eleri hem de btn kalp sn+lar !"elletirilebilir# $%nlardan baka g!rdm" !"elletirmeler, kalp tip deikenlerini !"elletirdi# $% b!lmde !"elletirmelerin baka bir trn ele ala&a"# Kalp deikenlerinin hem tip hem de sa )larak !"elletirilmelerini in&ele e&ei"# )k sa da kalp deikeni )lan kalp sn+lar iin ksmi !"elletirmeler tanmlanr# Ksmi !"elletirme ile, kalp tip deikenlerinin bir b!lmne -ve a herhangi bir b!lmne/ !"el deerler verilir# <n&eki ksmda kalp tip deikenlerinin !"elletirmelerini irdelemiken, tipi )lma an deiken !"ellemelerini b%rada g!re&ei"# Kalp tipi )lma an deikenlerin ksmi !"ellemelerini, lineer &ebirin bir dal )lan matrikslerin ba" %ns%rlarn k%llanarak akla a&a"# 9a gn k%llanma g!re matriksler, sa larla d)ld%r%lm% satr ve st%nlardan )l%an bir tabl)d%r# Kalplar k%llanmak iin hemen bir al apalm# Uatrikste er alan sa lar bildiimi" do%& e deerler )labilir# 'slnda k)mpleks sa larda )labilir# Kalp sn+nda t pename UataP"pe ta b%l%n%r# (imdi ba" matriks !rneklerine bakalm* deerleri d)%ble )ls%n#

1 7 7 7 1 7 7 7 1

FZF lk !"de matriks

1.9 7 7 7 7 1.9 7 1.9 8 : d e 7 BBEZG lk matriksC E satr G k)l)n BBDZH matriks satr matriks

Uatriksler belli sa da satr ve st%nlara sahiptir -b%nlara matrikslerin b) %t% denir/, b) %t matriksleri k%llanrken deime", ) "den b%nlar kalp tipi )lma an deiken deerleri )larak alr", UataP"pe,do%& e matrikslerin )%nda geerli )ld%%ndan, do%& e varsa lan deer kab%l edilir# $! le&e Uatriks kalp sn+m"n balang&* temp ate -%nsigned [o(s, %nsigned Co %mns, UataP"pe,do%& e* ! ass Matriks #### ### Uatriksler "erinde )k sa da ilem tanmlanabilir# 6)planabilirler, karlabilirler, arplabilirler# (imdi b% ilemler "erinde d%rma a&a"# =aha basit bir ilem "erine )%nlaa&a"* satr ve k)l)nlardakileri a r a r t)plama ve genel t)plam# <rnekte matriksin kenar t)plamlar ve genel t)plam g!sterildi* matriks 1 1 8 9 : F k)l)n kenar t)plam : d 11 satr kenar t)plam F 1d 19 -genel t)plam/

Kalp sn+m" iin !nere&eklerimi" nelerQ#

WW <n&e matriks !elerini sakla a&ak er gerekli# <eler, UataP"pe tipinde, [o(s adnda satr, Co %mns adnda k)l)n di"ileri )larak tanmlanrlar# Uatriks b) %tlar -satr ve k)l)n/ temel !n&elik )ld%% iin g!sterge deil di"idir -arra /# Co %mn !elerinin vekt!r -Uatriks satr/ [o( !elerinin vekt!r -Uatriks k)l)n%/ kadar sklkla k%llanld iin, t"pede# ler de dnlebilir# Sn+ ara "nn balang& aadaki gibi )labilir* p%& i!H t"pede# Matri'-1, Co %mns, UataP"pe* Matri'[o( / t"pede# Matri'-[o(s, 1, UataP"pe* Matri'Co %mn / privateH Matri'[o( d$matri'C[o(sD / WW 9ap& ilevleri )lmas la"m* varsa lan ap&, ve !rnein* aktan matriksi balatatn ap& ilev# Narsa lan k)p a ap& ilev g!revini tam )larak erine getirdii iin k)p a ap& ilev gerekme"# $en"er ekilde bindirilmi atama ile&i ve a k& ilev de gerekme"# 8te p%& i! b!lmde belirtilen ap&lar* Matri'(stdHHistream6 str)< #or(%nsigned ro(,7/ ro(-[o(s/ ro(++) #or(%nsigned !o ,7/ !o -Co %mns/ !o ++) str**d$matri'Cro(DC!o D / I Matri'( )< stdHH#i (d$matri', d$matri'+[o(s, Matri'[o(( )) / I WW Sn+n operatorCD( ) esi -ve !onst biimi/ sade&e ilk di"ini !netir, btn bir Matri'[o( a da an d!ndrr# Matri'[o( da geri kalan !elerin !netimini ksa&a anlata&a"# <rnei ksa t%tmak iin, di"ide snr denetimleri aplma a&ak# Matri'[o(6 operatorCD (%nsigned id')< ret%rn d$matri'Cid'D/ I WW (imdi ilgin bir ksma geldik* Matri' te kenar hesaplamalar ve genel t)plam# Kenar t)plamalarn vekt!r )larak dnelim# Matri'[o( k)l)n

kenar t)plamn, Matri'Co %mn satr kenar t)plamlarn vermektedir# Satr kenar t)plam satrdaki !elerin t)plam, k)l)n kenar t)plam k)l)ndaki !elerin t)plamn verir# 9%kardaki !rnee bakp % g%lama g!rebilirsini"# Kenar t)plamlarn genel t)plam )larak DZD lik matriks halinde de a"labilir# 'rtk k)n% % anladn", Matri'[o( ve Matri'Co %mn nesnelerini !netebilmek iin ksmi !"elletirme i ina edebiliri"# ; elerin % g%lamalar aada* Matri'[o( !o %mnMargina s( ) !onst< ret%rn Matri'[o((0this) / I Matri'Co %mn ro(Margina s( ) !onst< ret%rn Matri'Co %mn(0this) / I UataP"pre s%m( ) !onst< ret%rn ro(Margina s( ).s%m( ) / I Kalp sn+ ksmi !"elletirmeleri kalp deikenlerinden herhangi biri ve a, bir gr%b% iin tanmlanabilir# $%nlar kalp tip deikenleri ve a ben"er ekilde, kalp tipi )lma an deikenleri iin tanmlanabilir# 8lk ksmi !"elletirmemi" temel matriks satr inaatn -!"ellikle de k)l)n kenar hesaplamalar ama& ile, ama b%n%nla snrl deil/ tanmlar# 8te ksmi !"elletirme inaat aamalar* WW Ksmi !"elletirme, ksmi !"elletirmede !"ellememi btn kalp tip deikenlerini tanmla arak balar# $% ksmi !"elletirme kalp ilan, herhangi bir varsa lan belirtme" -UataP"pe,do%& e gibi/# :ira, varsa lanlar temel kalp sn+ tanmnda belirtilir# $%ndan !te e, !"elletirme temel kalp sn+ tanmn takip etmek ")r%ndadr, )ksa derle i&i hangi sn+n !"elletiini bileme" ve b%n% derleme esnasnda s)r%n apar# Kalp ilann takiben sn+ ara " balar# Kalp sn+ -ksmi/ !"ellemesi )ld%% iin, sn+ adn, !"elletirmede belirtilen btn kalp deikenleri iin ana deerler ve a tipleri g!steren kalp tip deiken listesi i"ler# Ne kalbn geri kalan deikenleri iin kalbn temel tip -ve a tipi )lma an/ adlar k%llanlr# Matri'[o( !"elletirmesinde [o( 1 )larak belirtilir, "ira bi" tek satrdan s!"etmekte i"# 3em Co %mns hem de UataP"pe belitile&ekler arasnda kalrlar# Matri'[o( ksmi !"elletirmesi aadaki gibi balar*

temp ate -%nsigned Co %mns, t"pename UataP"pe* JJvarsa"3 an ar "ok ! ass Matri'-1, Co %mns, UataP"pe* WW Matri'[o( tek satrn verisini tar# $% "den =ata6 pe tipinde C)l%mn deerlerini saklamak iin bir veri esi gerekir# Co %mn sabit deer )ld%%ndan, d$ro( veri esi di"i )larak tanmlanabilir# UataP"pe d$!o %mnCCo %mnsD / WW 9ap& ilevlerin inaatna bira" dikkat etmek la"m# Narsa lan ap& ilev basit# O, Matri'[o( %n veri elerini balatr, UataP"pe n varsa lan ap&sn k%llanarak ta* Matri'< stdHH#i (d$!o %mn, d$!o %mn+Co %mns, UataP"pe( )) / I $%ndan baka, temel Matri' nesnesinin k)l)n kenar hesaplarna sahip Matri'[o( nesnesini balatan bir ap& ileve gerek d% %l%r# $% da, ap&nn !"ellememi Matri' deikeni ile )l%t%r%lmasn gerektirir# $%na ben"er d%r%mlarda ana k%ral, deikenin genel apsn k)r% an e kalp tanmlamaktr# 6emel Matri' kalb tane kalp deikeni istedii iin, ikisi kalp !"elletirilmesin&e saland, n& deiken m%tlaka e kalbn kalp ilannda belirtilmelidir# $% deiken temel Matri' in satr sa sna denk geldii iin, adna ksa&a [o(s deri"# (imdi geldik ikin&i ap& ilevin tanmna, b% da temel Matri' nesnesinin k)l)n kenar hesaplarn b%l%nd%ran Matri'[o( %n verilerini balatr# temp ate -%nsigned [o(s* Matri'(Matri'-[o(s, Co %mns, UataP"pe* !onst6 matri')< stdHH#i (d$!o %mn, d$!o %mn+Co %mns, UataP"pe( )) / #or(%nsigned !o ,7/ !o -Co %mns/ !o ++) #or(%nsigned ro(,7/ ro(-[o(s/ ro(++) d$!o %mnC!o D+,matri'Cro(DC!o D / I 9ap& deikenlerini belirleme biimine dikkat edilmeli* Matri' kalbna da an )ld%% gibi, ksmi !"elletirmenin kalp deikenlerinin kendileri

kadar ek [o( kalp deikeni de k%llanlr# WW Tk eler gerekte ) anki ihti alar iin istenmemektedir# $indirilmi ile operatorCD ( ), Matri'[o( veri !elerine erimekte ie arar# 9ine, !onst eit !onst )lma an eit gibi % g%lanabilir# U g%lama aada* UataP"pe6 operatorCD (%nsigned id')< ret%rn d$!o %mn(id') / I (imdi, tek satr tanmla arak aplan ksmi !"elletirme kadar, temel Matri' sn+n tanmlamakta "# =erle i&i satr !"ellemesini, [o(,1 k%llanarak Matri' in tanmland anlardan birinde seer# <rnek* Matri'-5, :* matri'/ Matri'-1, :* ro( / BBtemel UatriZ kalb k%llanlr BBksmi !"elletirem k%llanlr

Matri'Co %mn iin de ksmi !"elletirme ben"er ekilde aplr# WW Kalp sn+ ksmi !"ellemesi ine kalp ilan ile balar# Sn+ tanmnn kendisi, ikin&i temel kalp deikeni iin belli bir deer belirtir# 3er bir kalp deikeni iin ksmi !"elletirme ina edilebile&ei g!sterilir* sade&e ilk ve a s)n%n&% deil# temp ate -%nsigned [o(s, t"pename UataP"pe* ! ass Matri'-[o(s, 1, UataP"pe* WW 9ap& ilevler tamamen UatriZ])_ ap&larna ben"er ekilde gereklenir# $%n%n !rneini de artk si" a"n#M WW s%m( ) ek esi Matri'Co %mn vekt!r !elerini t)pla arak tanmlanr# $% % g%lama a!!%m% ate( ) temel alg)ritmas k%llanlarak gereklenir# UataP"pe s%m( )< ret%rn stdHHa!!%m% ate(d$ro(, d$ro(+[o(s, UataP"pe( )) / I aadaki matriks ne e )l aarQ# Matri'-1, 1* !e /

$% Matri'[o( !"ellemesimi )ksa Matri'Co %mn !"ellemesimiQ# Cevap* hibiri# 6amamen belirsi"# nk hem satr hem de k)l)n bir -+arkl/ kalp ksmi !"elletirmesi ile k%llanlabilir# Ter b! le bir UatriZ gerekten istenirse, baka ikin&i !"elletirilmi kalp tasarlanmak ")r%ndadr# $% kalp !"ellemesi Matri' !elerinin t)plamnda ararl )ld%% iin, a rntlar aada verildi* WW $% kalp sn+ ksmi !"elletirmesi a r&a bir kalp ilanna gerek d% ar#$% de+a sade&e UataP"pe belirtilir# Sn+ tanm iki sabit deeri belirtir# K)l)n ve satr sa larnn her ikisi iin de D -bir/ deeri alnr* temp ate -t"pename UataP"pe* ! ass Matri'-1, 1, UataP"pe* WW <"elletirme ap& ilevlerin hepsini tanmlar# 9ine, daha genel Matri' tipinden ka naklanan ap& ilevler, e kalplar )larak gereklenir# <rnek* temp ate -%nsigned [o(s, %nsigned Co %mns* Matri'(Matri'-[o(s, Co %mns, UataP"pe* !onst6 matri') H d$!e (matri'.ro(Margina s( ).s%m( )) <I temp ate -%nsigned [o(s* Matri'(Matri'-[o(s, 1, UataP"pe* !onst6 matri') H d$!e (matri'.s%m( )) <I WW Matri'-1, 1*, UataP"pe deeri etra+nda bir !rt& )ld%% iin, daha s)nraki elere erimek iin elere gerek d% %l%r# $ir tip evrim ile&i ararl )labilir, ama derle i&i evrim ile&ini k%llanma"sa, ilgili deeri elde etmek iin a r&a get( ) esine gerek vardr# 8te eriim&iler -!onst eitleri a"lmad/* operator UataP"pe 6( )< ret%rn d$!e / I UataP"pe 6get( )<

ret%rn d$!e ( ) / I 'adaki main( ) ilevi Matri' kalp sn+ ve !"elletirmelerinin k%llanm biimini g!stermektedir* .in! %de -iostream* .in! %de =matri'.h? %sing namespa!e std / int main(int arg!, !har00 argv)< Matri'-5, 1* matri'(!in) / Matri'-1, 1* !o Margins(matri') / !o%t--?ko on kenar ariH En? / !o%t--!o MarginsC7D--? =--!o MarginsC1D--end / Matri'-5, 1* ro(Margins(matri') / !o%t--?satir kenar ariH En? / #or(%nsigned id',7/ id'-5/ id'++) !o%t--ro(MarginsCid'D--end / !o%t--?gene top amH =--Matri'-1, 1*(matri')--end / ret%rn 7 / IJJJHK BBgirdiden retilen ktlarC D E F G H > k)l)n kenarlariC R DE satir kenarlariC F d DD genel t)plamC EDBB

Ba 3p S3n3# ar3n Mn 3k U%r%m ar3


$ir kalp sn+ nesnesi tanmland "aman, kalp sn+nn anlk d%r%m% saptanm )l%r# $ir kalp sn+ nesnesi tanmlandnda ve a bildirildiinde, kalp deikenleri m%tlaka aka belirlenmelidir# $ir kalp sn+, varsa lan kalp deiken deerlerini tanmlad "aman, ) d%r%mda derle i&i varsa lanlar salasa bile, kalp deikenleri a r&a belirtilir# Kalp ilevlerindeki gibi, kalp deikenlerinin asl deerleri ve a

tipleri, hi bir "aman karmda b%l%narak elde edileme"# K)mpleks deerlerden )l%an bir Matri' tanmlamak iin aadaki ap k%llanlr# Matri'-5, 9, stdHH!omp e'* !omp e'Matri' / 'adaki ap do%& e deerlerden )l%an Matri' tir# Matri'-5, 9* do%& eMatri' / Kalp sn+ nesnesi, e'tern anahtar kelimesi k%llanlarak bildirilebilir# <rnek )larak, aadaki ap !omp e'Matri' i bildirir* eZtern UatriZ4F, H, stdCC&)mpleZ5 &)mpleZUatriZ * 8lev bildirimleri, kalp sn+ nesneleri, g!stergeleri, da anlar )lan deikenlere ve a geri d!n deerlerine sahip ilevlerden derlenmise, kalp sn+ bildirimi eterlidir# 'adaki ka nak d)s as, derle i&i matriZ kalp sn+ tanmna rastlamasa bile derlenebilir# 6emel kalp sn+lar !"elletirmeler -ksmi/ kadar bildirilebilir# =aha da !te e, bir kalp sn+ nesnesi, da an&, ve a deikeni bekle en ve a d!ndren ilevin kendisi )t)matik kalp ilevi )l%r# $%, +arkl kalp deikenlerin h% larn belirtirken gereklidir# temp ate -%nsigned [o(s, %nsigned Co %mns, t"pename UataP"pe,do%& e* ! ass Matri'/ temp ate -%nsigned Co %mns, t"pename UataP"pe* ! ass Matri'-1, Co %mns, UataP"pe*/ temp ate -%nsigned Co %mns, t"pename UataP"pe* ! ass Matri'-1, Co %mns, UataP"pe* #%n!tion(Matri'-[o(s, Co %mns, UataP"pe* mat) <I =erle i&i, kalp sn+lar k%llanldnda, !n&e )nlar derlemek ")r%ndadr# $% "den kalbn anlk d%r%m% saptand "aman derle i&i kalp e ilevleri bilmek ")r%ndadr# 6abii b%, kalp sn+ nesnesi tanmlandnda, kalp sn+nn btn elerinin anlk d%r%mlarnn saptana&a anlamna gelme"# =erle i&i sade&e gerekten k%llanlan elerin anlk d%r%mlarn

saptar# $%, aadaki iki ap& ilevi ve iki de esi b%l%nan M"an sn+ !rnei ile g!sterildi* bir ap& ilevin k%llanld ve bir enin arld main( ) ilevi )l%t%r%ld%%nda, s)n% hede+ d)s a ve altrlabilir pr)gramn ak)rd%n% apabiliri"# =aha s)nra, k%llanlma an ap& ilev ve enin )r%m d kalr ve sn+ tanm deitirilir# 9ine, main( ) derlenir ve iliimlenir, elde edilen b) %t daha !n&ekiler ile a ndr# Sade&e k%llanlan elerin anlk d%r%mlarnn saptand baka % g%lamalarda mev&%tt%r# $%nlardan eriilen s)n%* sade&e asl k%llanlan kalp e ilevlerinin ilk deer atamas aplr# Kk bir deneme iin k%llanlan M"an kalp sn+ !rnei* .in! %de -iostream* temp ate -t"pename P"pe* ! ass M"an< P"pe d$data / p%& i!H M"an( ) H d$data(P"pe( )) <I void mem&er1( )< d$data+,d$data / I BBaadaki eler ikin&i pr)gram derlenmeden evvel g!"ard edilir# M"an(P"pe !onst6 va %e) H d$data(va %e) <I void mem&er1( )< d$data+,va %e / I I/ int main( )< M"an-int* a"an / a"an.mem&er1( ) / IJJJHK

Ba 3p S3n3# Ae Mn 3k U%r%m ar3n ]2 em enmesi

=aha !n&eki b!lmde -kalp ilevleri/, kalp deikenlerine bal k)dlar ve, kalp deikenlerine bal )lma an k)dlar arasndaki +arklar anlatlmt# ' n +arkllklar kalp sn+lar tanmlandnda ve k%llanldnda da geerlidir# Kalp tanmland "aman, kalp deikenlerine bal )lma an k)d, derle i&i tara+ndan )na lanr# <rnek* kalp sn+ndaki e ilev Tsort( ) ilevini k%llanrsa, ) "aman Tsort( ) kalp deikenine baml deildir# $% nedenle derle i&i Tsort( ) ilev arsna rastladnda, daha !n&eden m%tlaka )n% tan )r )lmaldr# U g%lamada tad anlam ise* !std i& -ve a std i&.h), ilemle e&ei kalp sn+ tanmndan !n&e, m%tlaka derle i&i tara+ndan ilemlenmelidir# <te andan, bir kalp -t"pename P"pe* kalp tip deikeni tanmlarsa, ba" kalp e ilev d!n tipi, !rnein* P"pe mem&er( ) ...... )l%r, daha s)nra aadaki d%r%mlarn b%l%nd%% derle i&inin karlat mem&er( ) e ilevi ve a mem&er( ) in ait )ld%% sn+lar arasndaki +arklar g!rr"* SSKalp sn+ nesnelerinin tanmland n)ktada, ani kalp sn+ nesnesinin anlk d%r%m%n%n saptand n)ktada, derle i&i kalp sn+ tanmn )k%r, mem&er( ) ben"eri e ilevlerin d)r% a"lp a"lmadklarn denetler# $% "den derle i&i, P"pe66 mem&er( ) ben"eri bildirim ve tanmlar kab%l etme", "ira C++ da an&a da an d!ndren ilevleri destekleme"# $%ndan baka, nesnenin anlk d%r%m%n% saptamada k%llanlan asl tip adnn var)l%p )lmad denetler# $% tip ad, nesne anlk d%r%m% saptand n)ktada derle i&i tara+ndan m%tlaka bilinmelidir# SSKalp e ilevlerin k%llanld n)ktada, ani kalp e ilevinin anlk d%r%m%n%n satand n)ktada, P"pe deikeni hala bilinmek ")r%ndadr, P"pe kalp deikenine baml mem&er( ) de imlerinin d)r% a"lp a"lmad denetlenir# <rnek )larak mem&er( ) aadaki de imi ihtiva ederse* P"pe tmp(P"pe( ), 17) / b% a"m biimi temelde geerlidir# $%n%nla beraber, P"pe,int ile mem&er( ) arld "aman, anlk d%r%m saptamas gerekleneme", nk

int, iki int deiken ta an ap& ileve sahip deildir# 3emen belirtelim, mem&er( ) b%l%nan sn+ nesnesinin anlk d%r%m% saptanrken, derle i&i iin b% s)r%n )lma"* nesnenin anlk d%r%m saptama n)ktasnda, mem&er( ) e ilev anlk d%r%m% belirleneme", ve b! le&e geersi" int inaat anlalama"#

ariend) erin Bi dirimi


ariend ilevler, sn+ destek ilevleri )larak ina edilirler ve kendileri sn+ eleri )larak ina edileme"ler# kt aklar iin i i bilinen erletirme ile&i -44/ b%n%n bir % g%lama n)ktasdr# ariend sn+lar )% ke" %val sn+larla bantldr, ani ierideki sn+ dardaki sn+ #riend )larak bildirir -ve a tersi/# 8te ine destek mekani"masna rastladk* ierideki sn+ dardaki sn+ desteklemek iin ina edili )r# 3epimi"in bildii sn+lardaki gibi, kalp sn+larda da, baka ilevler ve sn+lar #riend )larak bildirilebilir# $%n%n tersine de bildik sn+lar kalp sn+lar #riend )larak bildirebilir# $%rada da #riend, bildirilen sn+n ilev eteneini artrmak, desteklemek, !"el ilev ka"andrmak ve sn+ b tmek ama& ile ina edilir# ariend anahtar kelimesi herhangi tip sn+ta -bildik ve kalp sn+lar/, herhangi bir ilev ve a sn+, #riend )larak bildirmekte k%llanlmasna ramen, kalp sn+lar k%llanlrken aadaki d%r%mlarn a rdedimelidir* $ir kalp sn+, kalp )lma an bir ilev ve a sn+ #riend )larak bildirebilir# $% a gn ekilde k%llanlan #riend bildirimidir# <rnek* ostream nesnelerinde k%llanlan erletirme -44/ ile&idir# $ir kalp sn+, baka bir kalp ilev ve a sn+, #riend )larak bildirebilir# $% d%r%mda #riend kalp deikenleri m%tlaka belirlenmek ")r%ndadr# ariend in kalp deiken asl deerleri #riend i bidiren sn+n kalp deikenleri ile a n )lmak ")r%nda sa, ) "aman #riend/ Xbal #riend kalp[ ilev ve a sn+ )larak adlandrlr# $% d%r%mda, #riend bildirimindeki kalbn kalp deikenleri, #riend sn+ ve a ilevin kalp deikenlerini saptamada k%llanlr# $%rada kalp deikenleri ile +riend in kalp deikenleri arasnda bire bir denklik salanr# Tn genel % g%lamada, bir kalp sn+, baka bir kalp ilev ve a sn+n #riend i )larak bildirir, b%rada #riend in asl kalp deikenleri dikkate alnma"# $! le&e Xbal )lma an #riend kalp[ sn+ ve a ilevi bildirilir*

#riend kalp sn+ ve a ilevin kalp deikenleri belirlene&ekler arasnda braklr, #riend i bildiren sn+n kalp deikenleri ile !n&eden tanml )larak ilikili deildir# <rnek vere&ek )l%rsak* bir sn+ta, kalp deikenlerin&e belirtilen deiik tipte veri eleri varsa, ve baka bir sn+ ilgilendii b% sn+n elerine erimek -b%n%n iin #riend )lmaldr/ isti )rsa, b! le bir #riend in anlk d%r%m%n% saptamak iin gereken kalp deikenini belirtmeli i"## )k sa da bal #riend belirtmekten "i ade, bir kalp -bal )lma an/ #riend bildirilir, sade&e gerektii "aman #riend in asl kalp deikenleri belirtilir# 9%kardaki d%r%mlara, ani kalbn #riend )larak bildirildii, bildik sn+lar -n)rmal C++ sn+lar/ k%llanld "aman da rastlanr# 8lk kitabm"da sn+lar anlatrken, bildik sn+larn bildik sn+lar ve a ilevleri, nasl #riend )larak bildirdiini in&elemitik# A)rmal bir C++ sn+, tipi belli asl kalp deikenlerini #riend )larak bildirdii "aman, bal #riend ler, daha !n&eki bildik sn+lardaki gibi, a ns )l%r# $ildik bir sn+, kalp sn+ ve a ilevi #riend )larak bildirirse, bal )lma an #riend lerin a ns )l%%r# $%rada bir e i daha hatrlatalm* bildik sn+ ile, n)rmal, kalp )lma an C++ sn+ndan bahsedi )r%"#

Ba 3p ` ma"an ]2 ev ve S3n3# ar3n #riend o %2%


$ir kalp sn+ bildik bir ilevi bildirebilir, bildik e ilevler ve a btn sn+ )n%n #riend i )labilir# $! le bir #riend, kalp sn+n btn private elerine eriir# A)rmal sn+lar ve a n)rmal ilevler #riend )larak bildirilebilir elbette, ama tek bana sn+ e ilevi #riend )larak bildirilmeden !n&e, derle i&i m%tlaka ) e i bildireni sn+ ara "nde g!rmelidir# (imdi deiik )laslklar in&ele elim* Kalp sn+ bildik ilevi #riend )larak bildirir# $ildik ilevin #riend )larak bildirilme sebebi, tamam ile ak deildir# A)rmal k)%llarda sn+ nesnesi #riend )larak bildirilen ileve aktarlr# $% se+er de, tipleri belirtilmemi kalp deikeni b%l%nan ilev la"m )l%r# C++ aadaki a"m biimini destekleme"# void #onksi"on(stdHHve!tor-P"pe*6 ve!tor) #onksi"on( ) %n kendisi kalp deilse, b! le bir #riend in nasl ve neden

ina edile&ei ak deildir# $ir sebep, herhalde, ilev sn+n stati! pivate elerine erisin di edir# $%ndan baka, b! le #riend ler kendileri, )nlar #riend )larak bildiren sn+larn nesne anlk d%r%mlarn tespit edebilir ve b% eit nesnelerin private elerine d)r%dan eriebilir# 8te !nek* temp ate -t"pename P"pe* ! ass Storage< #riend void &asi!( ) / stati! %nsigned s$time / stdHHve!tor-P"pe* d$data / p%& i!H Storage( )< I I/ temp ate -t"pename P"pe* %nsigned Storage-P"pe*HHs$time,7 / void &asi!( )< Storage-int*HHs$time,time(7) / Storage-do%& e* storage / stdHHrandom$sh%## e(storage.d$data.&egin( ), storage.d$data.end( )) / I $ildik bir sn+ kalp sn+n #riend i )larak bildirmek, daha )k pratik ama tadn g!sterir# $%rada #riend sn+, kalp sn+n herhangi nesnesinin anlk d%r%mlarn tespit eder ve daha s)nra, btn private elerine erimek ama&n tar# Kalp sn+ tanmnn !nnde er alan basit bir !n& #riend sn+ bildirimi, b%n% gerekletirmek iin eterlidir# ! ass ariend / temp ate -t"pename P"pe* ! ass Beste!i< #riend ! ass ariend / stdHHve!tor-P"pe* d$data / p%& i!H Beste!i( ) / I/ ! ass ariend< Beste!i-int* d$ints / p%& i!H ariend (stdHHistream6 inp%t)<

stdHH!op"(stdHHistream$iterator-int* (inp%t), stdHHistream$iterator-int* ( ), &a!k$inserter(d$ints.d$data))/ I I/ $aka bir seenek )larakta, bildik sn+n sade&e bir e ilevi #riend )larak bildirilir# $% da derle i&inin, #riend bildirilmeden !n&e #riend sn+ ara "nn )k%masn gerektirir# 9k& ilev ve bindirilmi atama ile&i atlanarak aadaki !rnek, randomizer( ) e ilevi )lan bir sn+ Beste!i sn+nn #riend i )larak bildirili )r* temp ate -t"pename P"pe* ! ass Beste!i / ! ass ariend< Beste!i-int*0 d$ints / p%& i!H ariend(stdHHistream6 inp%t) / void randomizer( ) / I/ temp ate -t"pename P"pe* ! ass Beste!i< #riend void ariendHHrandomizer( ) / stdHHve!tor-P"pe* d$data / p%& i!H Beste!i(stdHHistream6 inp%t)< stdHH!op"(stdHHistream$iterator-int* (inp%t), stdHHistream$iterator-int* ( ), &a!k$inserter(d$data))/ I I/ ariendHHariend(stdHHistream6 inp%t) H d$ints(ne( Beste!i-int* (inp%t)) <I void ariendHHrandomizer( )< stdHHrandom$sh%## e(d$ints4*d$data.&egin( ), d$ints4*d$data.end( )) / I $%rada ariendHHd$ints bir g!sterge edir# =erle i&i ariend in

ara "n )k%rken Beste!i sn+ ara "n g!reme", b%ndan d)la Beste!i-int* nesnesi )l%t%r%lama"# $% g!"ard edilip Beste!i-int* d$ints veri esi tanmlamak, aadaki derle i&i hatasna )laar# errorH #ie d )d$ints) has in!omp ete t"pe $% n)ktada derle i&i Beste!i sn+ndan haberdar )l%rken, Beste!i nin ara "n g!rememekte, d)la s ile d$ints veri esinin b) %t%n% bilememektedir#

Be i Pip erin Ba 3p Mn 3k U%r%m ar3


,$al kalp, sn+lar ve a ilevlerinde, ,kalp #riend) lerin kalp deikenlerinin asl deerleri ile, )nlar #riend )larak bildiren kalp sn+larn kalp deikenleri arasnda, bire bir karlkllk b%l%n%r# K)n% ile ilgili +arkl )laslklar verelim* $ir kalp ilev bir kalp sn+n #riend i )larak bildirilebilir# $% d%r%mda kalp sn+larn +riend i )larak bildirilen bildik ilevlerden ka naklanan s)r%nlar hakknda bilgimi" )lma"# Kalp ilevin kendisi bi""at kalp )ld%% iin, i"in verilen gerekli kalp deikenleri kalp sn+ deikenini belirtir# $! le&e kalp ilevini #riend )larak bildiren sn+n nesnesi kalp ilevine aktarlr# $! le&e deiik bildirimlerin d"enleri aadaki gibi )l%r* SS #riend i bildiren kalp sn+n kendisi bi""at bildirilir# SS Kalp ilevi -#riend )larak bildirilir/ bildirilir# SS ,$al kalp #riend) ilevini bildiren kalp sn+ tanmlanr# SS Kalp -#riend/ ilevi tanmlanr, imdi btn kalp sn+ -private/ elerine eriir# Kalp #riend bildirimi, kalp ilev adn hemen takip eden kalp deikenlerini belirtir# 8lev adn takip eden ilev deikenleri b%l%nma"sa ) "aman bildik -n)rmal C++ +riend ilev/ #riend ilevle karlar"# (imdi vere&eimi" !rnek bal #riend k%llanmn g!steren s!"lk alt kme girilerini )l%t%r%r# 7erek ha at !rneklerinde +ke"1.#ind(ke"1) d!n daha % g%n )lmasna ramen, imdilik operator,, ( ) ile idare ede&ei"#

temp ate -t"pename Be", t"pename Aa %e* ! ass Ui!tionar"/ temp ate -t"pename Be", t"pename Aa %e* Ui!tionar"-Be", Aa %e* s%&set-Be" !onst6 ke", Ui!tionar"-Be", Aa %e* !onst6 di!t) / temp ate -t"pename Be", t"pename Aa %e* ! ass Ui!tionar"< #riend Ui!tionar"-Be", Aa %e* s%&set-Be", Aa %e* (Be" !onst6 ke", Ui!tionar"-Be", Aa %e* !onst6 di!t)/ stdHHmap-Be", Aa %e* d$di!t / p%& i!H Ui!tionar"( ) / I/ temp ate -t"pename Be", t"pename Aa %e* Ui!tionar"-Be", Aa %e* s%&set(Be" !onst6 ke", Ui!tionar"-Be", Aa %e* !onst6 di!t)< Ui!tionar"-Be", Aa %e* ret/ stdHHremove$!op"$i#(di!t.d$di!t.&egin( ), di!t. d$di!t.end( ), stdHHinserter(ret.d$di!t, ret.d$di!t.&egin( ), stdHH&ind1nd(stdHHeT%a $to-Be"* ( ), ke"))/ ret%rn ret / IJJJHK $tn bir kalp sn+ bir kalp sn+n #riend i )larak bildirilirse, #riend sn+n btn eleri, kendisini #riend )larak bildiren sn+n btn private elerine eriir# ariend sn+ iin gereken sade&e bildirilmektir# $%n%n bildirim d"eni, bir kalp ilevin #riend )larak bildirilmesinden )k daha k)la dr# 'adaki !rnekte ;terator sn+, Ui!tionar sn+nn #riend i )larak bildirile&ektir, b! le&e ;terator Ui!tionar sn+nn btn private elerine eriir# $%rada belirtmemi" gereken ba" ilgin n)ktalar b%l%nmaktadr* SS $ir kalp sn+ #riend )larak bildirmek iin, !n&e )n% kalp sn+ )larak bildirmeli, daha s)nra da a n sn+ #riend )larak bildirmelidir# 'adaki gibi* temp ate -t"pename Be", t"pename Aa %e* ! ass ;terator/

temp ate -t"pename Be", t"pename Aa %e* ! ass Ui!tionar"< #riend ! ass ;terator-Be", Aa %e* / SS $%n%nla birlikte, #riend sn+n ara ", derle i&i b% ara " g!rmeden !n&e k%llanlabilir# ;terator -Be", Aa %e* &egin( )< ret%rn ;terator-Be", Aa %e* (0this) / BB+riend,in ap&s k%llanlr ;terator -Be", Aa %e* s%&set(Be" !onst6 ke")< ret%rn ;terator-Be", Aa %e* (0this).s%&set(ke") / BB e ilev k%llanr I SS Tlbette #riend in ara " hala derle i&i tara+ndan g!rlmek ")r%ndadr# Ui!tionar" nin destek sn+ )ld%%ndan stdHHmap veri esini d"gn biimde tanmlar, ap& ilevi ilk deerini atar ve Ui!tionar" nin private veri esi d$di!t e eriebilir* temp ate -t"pename Be", t"pename Aa %e* ! ass ;terator< stdHHmap-Be", Aa %e*6 d$di!t / p%& i!H ;terator(Ui!tionar"-Be", Aa %e*6 di!t) H d$di!t(di!t.d$di!t) <I SS ;terator esi &egin( ) bir map inele i&isi d!ndrr# Map anlk d%r%m%n%n nasl bir e )ld%% derle i&i tara+ndan bilinmediinden, map-Be", Aa %e*HHiterator bir -deeri dk/ i tip addr# 6ip adn -t pename/ ak bir hale getirmek iin, &egin( ) d!n balang&na t"pename eklenir# t"pename stdHHmap-Be", Aa %e*HHiterator &egin( )< ret%rn d$di!t.&egin( ) / I SS <n&eki !rnekte Ui!tionar" nin ;terator % ina etmesine karar vermitik, ;terator Ui!tionar" e )k i i balanmt# $%, ;terator %n

ap& ilevini )n%n private b!lmnde tanmla arak, ve Ui!tionar" i ;terator %n #riend i bildirerek gereklenir# 9erine g!re sade&e Ui!tionar" kendi ;terator %n% )l%t%rabilir# ;terator %n ap& ilevini ,bal #riend, bildirerek, sade&e a n kalp deikenlerini k%llanan ;terator lar )l%t%rmak gven&e e alnr# 8te !rnek* temp ate -t"pename Be", t"pename Aa %e* ! ass ;terator< #riend Ui!tionar"-Be", Aa %e*HHUi!tionar"( )/ stdHHmap-Be", Aa %e*6 d$di!t / ;terator(Ui!tionar"-Be", Aa %e*6 di!t) H d$di!t(di!t.d$di!t) <I p%& i!H $% !rnekte, Ui!tionar" nin ap& ilevi, ;terator %n #riend i )larak tanmlan )r# $%rada #riend bir kalp edir# <teki eler sn+ #riend leri )larak bildirilebilir, !ntipleri m%tlaka k%llanlmal, tabii geri d!n tipleri ile beraber# Kab%l ede&eimi"* stdHHve!tor-Aa %e* sortAa %es( ) Ui!tionar" nin bir esidir# =eerleri bakmndan sra a di"ili ve&t)r, daha s)nra denk gelen ,bal #riend, bildirimi* stdHHve!tor-Aa %e* Ui!tionar"-Be", Aa %e*HHsortAa %es( )

BaG 3 ` ma"an Ba 3p ariend) er


$ir #riend ,bal )lma an #riend, )larak bildirildii "aman, var)lan bir kalb #riend )larak bildirmi )l%r# On%n anlk d%r%m saptamasnn nasl, !nemli deildir# ariend, #riend i bildiren kalp sn+ nesnelerinin anlk d%r%m saptamalarnda k%llanlrken ararl )l%r, #riend e anlk d%r%mlar saptanm nesnelerin, private elerine eriim i"ni verilir# 9ine, ilevler, sn+lar ve e ilevler bal )lma an #riend ler )larak bildirilirler# (imdi ,bal )lma an #riend, lerin bildirim a"llarn ele alalm* SS $al )lma an kalp ilevini #riend )larak bildirmek iin* kalp

ilevinin anlk d%r%m% kalp sn+ nesnelerinin anlk d%r%mlarn verir, ve )n%n private elerine eriir# 'adaki kalp ilevinin tanmlandn kab%l edelim* temp ate -t"pename ;terator, t"pename C ass, void (C assHH0mem&er) (Uata6)* C ass6 aorSa!h(;terator &egin, ;terator end, C ass6 o&Qe!t, void (C assHH0mem&er) (Uata6)) / $% kalp ilevi, aadaki kalp sn+ Ae!tor1 de, bal )lma an #riend )larak bildirilir# temp ate -t"pename P"pe* ! ass Ae!tor1H p%& i! stdHHve!tor-stdHHve!tor-P"pe**< temp ate -t"pename ;terator, t"pename C ass, t"pename Uata* #riend C ass6 aorSa!h(;terator &egin, ;terator end, C ass6 o&Qe!t, void (C assHH0mem&er) (Uata6)) / ... I/ Kalp ilevi bir isim alannda -namespa!e/ tanmlanmsa, isim alan m%tlaka belirtilmelidir# <rnek )larak eer aorSa!h( ) ilevi SB isim alannda tanmlanmsa, ) "aman )n%n #riend bildirimi* temp ate -t"pename ;terator, t"pename C ass, t"pename Uata* #riend C ass6 SBHHaorSa!h(;terator &egin, ;terator end, C ass6 o&Qe!t,void (C assHH0mem&er) (Uata6)) / 'adaki !rnekte bal )lma an bir #riend k%llanm g!sterilmektedir# Ae!tor1 sn+, P"pe tipinde kalp deiken !elerinin ve!tor,lerini saklar# Sn+n pro!ess( ) esi, aorSa!h( ) i private e ro(s( ) % armakta k%llanr# 6ekrar d!nte de aorSa!h( ) private e !o %mns( ) arr# 9erine g!re Ae!tor1, aorSa!h( ) ilevinin iki tane anlk d%r%m%n% k%llanr, ve b%ndan d)la b%ras iin bal )lma an #riend daha % g%n )l%r# P"pe sn+ nesnelerinin ostream nesnelerine erletirildii kab%l edili )r# =aha !n&e bahsi geen Y)rTa&h- / kalp ilev tanm bir s)nraki b!lmde verile&ek# 8te pr)gram* temp ate -t"pename P"pe*

! ass Ae!tor1H p%& i! stdHHve!tor-stdHHve!tor-P"pe**< temp ate -t"pename ;terator, t"pename C ass, t"pename Uata* #riend C ass6 aorSa!h( )(;terator &egin, ;terator end, C ass6 o&Qe!t, void (C assHH0mem&er) (Uata6)) / p%& i!H void pro!ess( )< aorSa!h(&egin( ), end( ), 0this, 6Ae!tor1-P"pe*HHro(s)/ I privateH void ro(s(stdHHve!tor-P"pe*6 ro()< aorSa!h(&egin( ), end( ), 0this, 6Ae!tor1-P"pe*HH!o %mns)/ stdHH!o%t--stdHHend / I void !o %mns(P"pe6 str)< stdHH!o%t--str--? = / I I/ %sing name spa!e std/ int main( )< Ae!tor1-string* ! / !.p%sh$&a!k(ve!tor-string* (5, =Merha&a?)) / !.p%sh$&a!k(ve!tor-string* (1, =U%n"a?)) / !.pro!ess( ) / IJJJHK BBktC Uerhaba Uerhaba Uerhaba =%n a =%n a BB SS $en"er ekilde btn bir kalp sn+ta, #riend )larak bildirilebilir# $%, #riend e ilevlerin hepsinin anlk d%r%mlarna, #riend sn+ bildiren kalbn anlk d%r%m%n% saptama i"ni verir# $% d%r%mda, #riend i bildiren sn+, #riend sn+nn +arkl anlk d%r%mlar iin ararl davranlar -kalp deikenleri iin +arkl veri tipleri k%llanmak gibi/ tekli+ etmelidir# 9a"m biimini, bal )lma an #riend kalp ilev bildiriminin a"m ile karlatrabilirsini"* temp ate -t"pename P"pe*

! ass >trAe!tor< temp ate -t"pename ;terator, t"pename C ass* #riend ! ass Rrapper / JJbal )lma an +riend sn+ I/ Rrapper kalp sn+nn btn eleri, P"pe kalp deikeni iin herhangi bir asl tipi k%llanarak, >trAe!tor lerin anlk deerlerini saptar# ' n "amanda Rrapper in anlk d%r%mlar, >trAe!tor n btn private elerine eriim hakk ka"anr# SS Kalp sn+n sade&e ba" eleri baka bir kalp sn+n private elerine eriim ihti a& d% d%% "aman, - ani private ap& ilevleri )lan !teki kalp sn+, birin&i kalp sn+n sade&e ba" eleri ikin&i kalp sn+n nesnelerinin anlk d%r%mlarn sapt )r/ ) "aman, s)nra gelen kalp sn+ ana sn+n sade&e ) elerini, kendi private elerine eriebilmesi iin #riend )larak bildirir# 9ine, #riend sn+n ara " belirtilmeden braklr# $%n%n annda, derle i&i #riend enin sn+ hakknda m%tlaka bilgilendirilmelidir# 9ani ) bir sn+tan geli )r di e# $%ndan d)la ilgili sn+n !n& bildirimi % g%n erde m%tlaka verilmelidir# 'adaki !rnekte >trAe!tor, RrapperHH&egin( ) i #riend )larak bildiri )r# Rrapper sn+nn !n& bildirimine dikkat edin* temp ate -t"pename ;terator* ! ass Rrapper/ temp ate -t"pename ;terator* ! ass >trAe!tor< temp ate -t"pename ;terator* #riend >trAe!tor-P"pe* Rrapper-;terator*HH&egin(;terator !onst6 t1)/ ... I/

Ba 3p S3n3# Pretimi
Kalp sn+lar sn+ tretimlerinde de k%llanlabilir# $ir kalp sn+ sn+ tretiminde k%llanld "aman aadaki +arkl d%r%mlarla karlalr* SS Nar)lan bir kalp sn+n ana sn+ )larak k%llanp, bildik -n)rmal C++

sn+/ bir sn+ tretmek# $% d%r%mda tretilen bildik sn+, hala ksmen kalp sn+tr# 'ma b% !"ellik, tretilmi sn+tan nesne elde edilirken g!"den kaar# SS Nar)lan bir kalp sn+ ana sn+ )larak k%llanp, baka bir kalp sn+ tretmek# $%rada kalp sn+ !"ellikleri ak )larak g!rnr# SS $ildik -n)rmal C++ sn+/ bir sn+ ana sn+ )larak k%llanp, bir kalp sn+ tretmek# $% ilgin karm, kalp sn+larn ksmen !nderlemeli )larak inasn salar# $% deiik % g%lamann, imdi bira" daha a rntsn verelim* aadaki ana sn+tr, temp ate -t"pename P* ! ass Mna< P !onst6 t/ p%& i!H Mna(P !onst6 t) H t(t) <I I/ 9%kardaki sn+ bir kalp sn+tr, ve aadaki tretilmi Uerived kalp sn+nn ana sn+dr# temp ate -t"pename P* ! ass UerivedH p%& i! Mna-P*< p%& i!H Uerived(P !onst6 t) H Mna(t) <I I/ =ier )laslklarda mmkn# 'na sn+n bildik kalp tip deikenleri belirtilerek, ana sn+n anlk d%r%m% saptanr ve tretilen sn+ bildik -n)rmal C++ sn+, ani kalp sn+ deil/ bir sn+ )l%r# ! ass `rdinar"H p%& i! Mna-int*< p%& i!H

`rdinar"(int ') H Mna(') <I I/ BBaadaki nesne tanm ile Ordinar )-H/ * $% inaat kalp sn+na !"el d%r%mlarda eni davranlar eklenmesine i"in verir# $% srada tretilmi bir kalp sn+na da gerek d% %lma"#

Ba 3p 3dan, Ba 3p ` ma"an S3n3# Pretimi


$ir kalp sn+n ana sn+ )larak k%llanp kalp )lma an bir sn+ tretildii "aman, kalp sn+ deikenleri tretilmi sn+ ara " tanmlanrken belirtilir# $a" d%r%mlarda var)lan kalp sn+n ilevlerinde eksiklik g!rlrse, kalp sn+tan bildik sn+ tretimi ararl )l%r# <rnek )larak* belli bir !enin erini belirlemede map sn+ ile #ind$i#( ) kalp alg)ritmas birlikte k%llanlmasna ramen, a r&a bir sn+ inas ve ) sn+n en a" iki ek ilev nesnesi gerekir# $a" alardan b% masra+l g!"kse de, bir kalp sn+ siparie % g%n ilevlerle geniletmek daha akll&adr# Klav eden girilen k)m%tlar altran bir pr)gram, tanmlanm k)m%tlarn ksaltlm a"mlarn da kab%l edebilir# <rnek )larak ist gibi bir k)m%t% , i, is ve a ist a"arak altrabiliri"# 'adan cand er sn+n tretiri"* map-string, void (cand erHH0) (string !onst6 !md)* ve asl k)m%t ilemleri iin pro!ess(string !onst6 !md) tanmlanr# Kr)gram aadaki main( ) i basit bir biimde altrr* int main( )< string ine / cand er !md / (hi e(get ine(!in, ine) !md.pro!ess( ine) /

IJJJHK cand er sn+nn kendisi karmak map sn+ndan tretilir# Map deerleri cand er sn+ e ilevlerinin g!stergeleridir#Ne b%nlar k%llan&nn klav eden girdii k)m%t satrn beklerler# (imdi cand er in !"elliklerini verelim* SS stdHHmap ten tretilen sn+, klav e t%% )larak geen k)m%t ilemleme esinin k)m%t%n% bekler# cand er map i k)m%tlarla, alan e ilev arasndaki iliki i tanmlamak iin k%llandndan, b%rada private tretim % g%lar"* ! ass cand er H p%& i! stdHHmap-stdHHstring, void (cand erHH0) (stdHHstring !onst6 !md)* SS 'sl iliki, stati! private veri eler k%llanarak tanmlanabilir* s$!mds, cand erHHva %e$t"pe deerlerinin bir di"isidir, s$!mds$end ise di"inin s)n !esinden !te i iaret eden bir !onst g!stergetir# stati! va %e$t"pe s$!mdsCD / stati! va %e$t"pe0 !onst s$!mds$end / SS 9ap& ilev b% iki stati! veri esinden map i balatr# Satrii -in ine/ )larak % g%lanabilirler* cand er( ) H stdHHmap-stdHHstring, void (cand erHH0) (stdHHstring !onst6 !md)* (s$!mds, s$!mds$end) <I SS pro!ess( ) esi map !eleri b) %n&a inelemeler apar# 8lk ke", k)m%t satrndaki birin&i kelime k)m%t%n balang karakterlerine % ar, ve denk gelen k)m%t altrlr# Ter b! le bir k)m%t )ksa, hata iletisi retilir# void cand erHHpro!ess(stdHHstring !onst6 ine)< istringstream(istr ine)/ string !md /

istr**!md / #or(iterator it,&egin( )/ it+,end( )/ it++)< i#(it4*#irst.#ind(!md),,7)< (this4*0it4*se!ond)( ine) / ret%rn/ I I !o%t--?&i inme"en kom%tH =-- ine--end / IJJJHK

Ba 3p S3n3#tan Ba 3p S3n3# Pretmek


$ir kalp sn+tan bildik sn+ tretmek )ld%ka mkemmel gereklenmesine ramen, tretilen sn+ tretildii ana kalp sn+tan daha snrl genel !"elliklere sahiptir# Ter genellik !nemli se, ) "aman bir kalp sn+tan baka bir kalp sn+ tretmek, herhalde daha i i bir +ikirdir# $! le&e, var)lan bir kalp sn+ ek ilevlerle geniletilip, !eler hi erarik sralama a s)k%l%r# 'adaki SortAe!tor kalp sn+ var)lan Ae!tor kalp sn+ndan tretilmitir# $%n%n annda, veri !elerini ieren elerin herhangi bir sralamas k%llanlarak, !elerin hi erarik d"eni salanr# $%n% apabilmek iin ama bir gerek art b%l%nmaktadr* SortAe!tor n veri tipi, dier elerine g!re baka belli bir g!revi erine getiren, e ilevlere sahip )lmak ")r%ndadr# <rnek* SortAe!tor n veri tipi M% tiUata sn+nn bir nesnesidir, daha s)nra M% tiUata veri elerinin her biri iin aadaki !ntiplere sahip e ilevi % g%lar* &oo (M% tiUataHH0) (M% tiUata !onst6 rhv) $% "den eer M% tiUata iki veri e e sahip )l%rsa, -int d$va %e ve stdHHstring d$te't/ her ikisi de hi erarik sralama a g!re d"enlenir, daha s)nra M% tiUata eleri aadaki gibi )l%r* &oo intCmp(M% tiUata !onst6 rhv)/ BBdSval%e4rhv#dSval%e deeri d!ner &oo te'tCmp(M% tiUata !onst6 rhv)/ BB dSteZt4rhv#dSteZt deeri d!ner $%nlardan baka, gerektii iin operator--( ) ve operator**( ) ileleri

M% tiUata nesneleri iin tanmland kab%l edilir# 'ma b% kab%l, % anki in&elememi"den bams"dr# SortAe!tor kalp sn+ d)r%dan stdHHve!tor kalp sn+ndan tretilir# U g%lamam" iki basit ap& ilev kadar, ana sn+tan gelen btn eleri miras alr* temp ate -t"pename P"pe* ! ass SortAe!torH p%& i! stdHHve!tor-P"pe*< p%& i!H SortAe!tor( ) <I SortAe!tor(P"pe !onst0 &egin, P"pe !onst0 end) H stdHHve!tor-P"pe*(&egin, end) <I $%n%n annda, hierar!hi!a Sort( ) e ilevi sn+n asl varlk nedenidir# $% sn+ hi erarik sralanma k)%llarn tanmlar# Sn+n e ilevlerini iaret eden g!stergeler di"isi -arra /, sortAe!tor n kalp P"pe deikeni tara+ndan belirtilir# ' r&a di"i b kl de %nsigned tara+ndan belirtilir# =i"inin ilk !esi sn+n en b k deerini -m)st signi+i&ant/ ve a ilk sralama k)%l%n% belirtir# =i"inin s)n !esi ise, sn+n en kk deerini -least signi+i&ant/ ve a s)n sra a k) ma k)%l%n% belirtir# sta& e$sort( ) kalp alg)ritmas hi erarik sralama desteklemek iin tasarlanm )ld%%ndan, e b% alg)ritma k%llanarak SortAe!tor !elerini sra a k) ar# 3i erarik sralamada en kk deer k)%l% !n&e hi"a a girer# 3ierar&hi&alS)rt- / % g%lamas b%ndan d)la k)la dr# cierar!hi!a Sort( ) a aktarlan e ilev adreslerin&e ilk deerleri balatlan nesnelerin SortRith destek sn+ varl bir kab%ld%r* temp ate -t"pename P"pe* ! ass SortRith< &oo (P"peHH0d$ptr)(P"pe !onst6 rhv) !onst / SortRith sn+ hkm ilevine g!stergein etra+nda b%l%nan basit bir !rt -_rapper/ sn+dr# SortAe!tor n asl veri tipine baml )ld%% iin SortRith in kendisi de bir kalp sn+tr* temp ate -t"pename P"pe* ! ass SortRith<

&oo (P"peHH0d$ptr)(P"pe !onst6 rhv) !onst / $! le bir g!sterge&i ap& ilev tar ve sn+n d$ptr esinin ilk deerini atar* SortRith(&oo (P"peHH0ptr)(P"pe !onst6 rhv) !onst) H d$ptr(ptr) <I $%n%n iki&i -binar / klem esi operator( ) ( ), ilk veri ikin&i veriden !n&e sra a k)n%rsa, tr%e -d)r%.D/ d!ndrr* &oo operator( ) (P"pe !onst6 hv, P"pe !onst6 rhv) !onst< ret%rn ( hv.0d$ptr)(rhv) / I S)n )larak aadaki main( / ilevin&e % g%lama salanr* WW <n&e, M% tiUata nesneleri iin bir SortAe!tor nesnesi )l%t%r%l%r, pr)gramn standart akndan bilgileri SortAe!tor nesnesine erletirmek iin !op"( ) kalp alg)ritmas k%llanlr# Aesnenin ilk deerleri atanm )ld%%ndan, !eleri standart kt aknda g!rlr# SortAe!tor-M% tiUata* sv / !op"(istream$iterator-M% tiUata*(!in), istream$iterator-M% tiUata*( ), &a!k$inserter(sv))/ WW ; elerin g!sterge di"ileri iki e ilev adresi ile balatlr -ilk deer atamas aplr/# Uetin karlatrmas en b k sra a k) ma k)%l% )larak dnlr* &oo (M% tiUataHH0arrCD)(M% tiUata !onst6 rhv) !onst, < 6M% tiUataHHte'tCmp, 6M% tiUataHHintCmp, I/ WW $ir s)nra di"i !eleri sra a k)n%r, ve standart kt aknda g!sterilir#

sv.hierar!hi!a Sort(arr, 1) / WW =aha s)nra M% tiUata e ilevleri g!sterge di"isinin iki esi er deitirir, ve !n&eki adm tekrarlanr# s(ap(arrC7D, arrC1D) / sv.hierar!hi!a Sort(arr, 1) / Kr)gramn derlenmesinden s)nra aadaki k)m%t verilebilir* e!ho a 1 & 1 a 1 & 1 Z a.o%t S)n%lar aada* aDbEaEbD aDaEbDbE aDbDaEbE

Ba 3p 3 ` ma"andan Ba 3p S3n3#3 Pretmek


Nar)lan bildik sn+ k%llanarak bir kalp sn+ tretilebilir# $! le bir kaltm aa&nn arar* btn ana sn+ elerinin hepsinden !n&e derlenmesidir# $! le&e kalp sn+ nesnelerinin anlk d%r%mlar saptanrken, sade&e tretilen sn+n k%llanlan elerinin anlk d%r%mlar tespit edilir# $% aklam, % g%lamalar kalp deikenlerine baml )lma an e ilevlere sahip, btn kalp sn+lar iin k%llanlabilir# 8lgili eler, kalp sn+n tretile&ei ana sn+ )larak k%llanla&ak, a r bir sn+ta tanmlanr# $% aklam tantmak ama& ile, b% b!lmde b! le bir kalp sn+ trete&ei"# Pa& eP"pe sn+ndan tretilmi Pa& e kalp sn+n gelitire&ei"# $%rada Pa& eP"pe kalp sn+ )lma p bildik C++ sn+dr# Pa& e sn+, a arlanabilir sa da k)l)n% )lan ba" tip !elerin b%l%nd%% tabl) % g!sterir# <eler a ata -ilk k !esi ilk satr d)ld%r%r/ a da dike -ilk r !esi ilk k)l)n% d)ld%r%r/ )larak d"enlenip g!sterilir# 6abl) !eleri g!sterilirken, aka erletirilir# $% bi"e a r bir sn+ta -Pa& eP"pe/, tabl) k%llanm tanmna i"in verir# $! le&e tabl) tantm aplr# 6abl) !eleri aka erletirildii iin, metine evrim -string/ Pa& e iinde gereklenebilir, ama string lerin !netimi Pa& eP"pe a braklr# Pa& eP"pe !"elliklerini, !n&elikle Pa& e ara "nde

)%nlaarak, ksa&a anlata&a"* WW Pa& e sn+ kalp sn+tr, sade&e bir tane kalp tip deikeni gerekir* ;terator ba" veri tiplerinin inele i&isidir# temp ate -t"pename ;terator* ! ass Pa& eH p%& i! Pa& eP"pe< ... I WW Neri eleri gerektirme"* btn veri ilemleri Pa& eP"pe tara+ndan gereklenir# WW 8ki tane ap& ilevi b%l%n%r* 9ap&nn ilk iki deikeni )lan ;terator lar, tabl) a gire&ek !eler arasnda inelemeler iin k%llanlr# $%ndan da !te e, tabl)m%"daki ai Uire!tion kadar k)l)n sa sn da belirtmemi"i ister# ai Uire!tion aslnda corizonta ve Aerti!a deerlerine sahip Pa& eP"pe tara+ndan tanmlanr# ' r&a Pa& eP"pe k%llan&lar balklar, alt ksmlar, stlkleri, ata ve dike a r&lar denetlemeleri iin, ap&lardan birinde Pa& eS%pport da an deikenleri b%l%n%r# Pa& eS%pport k%llan&larn b% denetimi salamalar iin sanal bir sn+ )larak daha s)nra gelitirile&ektir# 9ap&lar ite aada* Pa& e(;terator !onst6 &egin, ;terator !onst6 end, %nsigned nCo %mns, ai Uire!tion dire!tion) / Pa& e(;terator !onst6 &egin, ;terator !onst6 end, Pa& eS%pport6 ta& eS%pport, %nsigned nCo %mns, ai Uire!tion dire!tion)/ WW 9ap&lar Pa& e n sade&e iki p%& i! esidir# 3er iki ap&, ana sn+ balat&lar k%llanarak )nlarn Pa& eP"pe ana sn+n balata&ak ve daha s)nra da, sn+n private esi #i ( ) arlarak Pa& eP"pe ana sn+ nesnesine veriler erletirile&ektir# 8te ap&larn % g%lamas* temp ate -t"pename ;terator* Pa& e-;terator*HHPa& e(;terator !onst6 &egin, ;terator !onst6 end, Pa& eS%pport6 ta& eS%pport, %nsigned nCo %mns, ai Uire!tion dire!tion) H Pa& eP"pe(ta& eS%pport, nCo %mns, dire!tion)<

#i (&egin, end) / I temp ate -t"pename ;terator* Pa& e-;terator*HHPa& e(;terator !onst6 &egin, ;terator !onst6 end, %nsigned nCo %mns, ai Uire!tion dire!tion) H Pa& eP"pe(nCo %mns, dire!tion)< #i (&egin, end) / I WW Sn+n #i ( ) esi C&egin, end) alanndaki !eleri inele ip d%r%r# ' nen ap& ilevin ilk iki deikenin&e tanmland gibi# Ksa bir ekilde g!re&eimi" "ere, Pa& eP"pe, prote!ted veri e stdHHve!tor-stdHHstring* d$string i tanmlar# Neri tipi iin gerekenlerden biri, inele i&iler n)ktasndan b% veri tipinin aklara erletirilebile&eidir# $! le&e, #i ( ), verinin metin eklini salamak iin ostringstream nesnesini k%llanr# 8te ) "aman d$stringe eklenir* temp ate -t"pename ;terator* void Pa& e-;terator*HH#i (;terator it, ;terator !onst6 end)< (hi e(it +, end)< stdHHostringstream str / str--0it++ / d$string.p%sh$&a!k(str.str( )) / I init( ) / I $% Pa& e sn+ % g%lamasn tamamlar# $%rada dikkat edile&ek n)kta* Pa& e sn+nn -F/ esi )ld%%d%r, b%nlardan ikisi ap& ilevdir# $%ndan d)la bir)k d%r%mda, sade&e iki kalp ilevinin anlk d%r%m% saptanr* bir ap& ilev ve #i ( ) sn+ esi# Nerilen aadaki !rnekte d!rt k)l)na sahip tabl) standart girdi akndan elde edilen string lerle dike )larak d)ld%r%l% )r* Pa& e-istream$iterator-string* * ta& e(istream$iterator-string*(!in), istream$iterator-string*( ), 8, Pa& eP"peHHAerti!a )/ $%rada !elerin erletirme d)r%lt%s% Pa& eP"peHHAerti!a ile

belirlenir#6abii Pa& e sn+n da k%llanarak b%n% belirtmek mmkndr# 'ma Pa& e sn+ kalp sn+ )ld%%ndan, a"m bira" daha karktr* Pa& e-istream$iterator-string* *HHAerti!a (imdi Pa& e tretilmi sn+ tasarland, artk dikkatimi"i Pa& eP"pe sn+na evirebiliri"# 8te temel !"ellikler* WW $% bir bildik sn+tr, Pa& e in ana sn+ )larak ilem apmas iin tasarland# WW $% deiik private veri eleri k%llanr# $%nlarn arasnda* her k)l)ndaki en b k !enin b kln sakla an vekt!r d$!o Ridth, ve ta& e Cro(DC!o D daki !e i d!ndren sn+ e ilevini iaret eden* d$inde'a%n, tabl)n%n hangi k)%llarda nasl sralama ile d)ld%r%la&an verir# Pa& eP"pe a r&a bir Pa& eS%pport g!sterge ve da an& da k%llanr# Pa& eS%pport nesnesi gerekme en ap&, Pa& eS%pport -varsa lan/ nesnesini bellee erletirebilmek iin Pa& eS%pport0 k%llanr, ve daha s)nra da Pa& eS%pport6 % nesnenin "ar+ )larak k%llanr# =ier ap&, g!sterge&i s+r -@/ deerinden balatr, ve deikenin&e belirlenen Pa& eS%pport nesnesine karlk gelen da an veri e i k%llanr# 8kin&i bir seenekte* ap&daki da an veri e i balatmak iin statik Pa& e S%pport nesnesi k%llanlmasdr# <teki veri eleri ise kendileri hakknda eterli bilgi i veri )r ite* Pa& eS%pport0 Pa& eS%pport6 %nsigned %nsigned %nsigned RidthP"pe stdHHve!tor-%nsigned* %nsigned stdHHstring !onst d$ta& eS%pport>tr/ d$ta& eS%pport / d$ma'Ridth / d$n[o(s / d$nCo %mns / d$(idthP"pe / d$!o Ridth / (Pa& eP"peHH0d$(idtha%n) (%nsigned !o ) !onst / 6(Pa& eP"peHH0d$inde'a%n) (%nsigned ro(, %nsigned !o ) !onst /

WW 6abl) a srekli erletirilen asl string nesneler, prote!ted veri ede saklanr#

stdHHve!tor-stdHHstring* d$string / WW 9ap&lar -prote!ted/ temel g!revleri erine getirir* nesne veri esinin ilk deer atamasn aparlar# 8te Pa& eS%pport nesnesine da an bekle en ap& ilev* .in! %de =ta& et"pe.ih? Pa& eP"peHHPa& eP"pe(Pa& eS%pport6 ta& eS%pport, %nsigned nCo %mns, ai Uire!tion dire!tion) H d$ta& eS%pport>tr(7), d$ta& eS%pport(ta& eS%pport), d$ma'Ridth(7), d$n[o(s(7), d$nCo %mns(nCo %mns), d$(idthP"pe(Co %mnRidth), d$!o Ridth(nCo %mns), d$(idtha%n(6Pa& eP"peHH!o %mnRidth), d$inde'a%n(dire!tion,,corizonta X 6Pa& eP"peHHh;nde' H 6Pa& eP"peHHv;nde') <I WW d$data bir ke" d)ld%r%ld%%nda, tabl) Pa& eHH#i ( ) ile balatlr# init( ) prote!ted esi, d$data ! le !leklendirirki b) %t tam tamna satrZst%n kadar )l%r# Tk )larak, st%ndaki !elerin )labile&ek en b k geniliini saptar# U g%lama ga et basittir* .in! %de =ta& et"pe.ih? void Pa& eP"peHHinit( )< i#(+d$string.size( )) ret%rn / d$n[o(s,(d$string.size( )+ d$nCo %mns41)Jd$nCo %mns / d$string.resize(d$n[o(s0d$nCo %mns) / #or(%nsigned !o ,7/ !o -d$nCo %mns/ !o ++)< %nsigned (idth,7 / #or(%nsigned ro(,7/ ro(-d$n[o(s/ ro(++)< %nsigned en,stringMt(ro(, !o ). ength( ) / i#((idth- en)

(idth, en / I d$!o RidthC!o D,(idth / i#(d$ma'Ridth-(idth) d$ma'Ridth,(idth / I IJJJHK WW >%& i! e )lan )lan insert( ) 6abl) % aka erletirmek iin erletirme ile&in&e -operator--( )/ k%llanlr# <n&e Pa& eS%pport nesnesi tabl) b) %tlar hakknda bilgilendirilir# =aha s)nra tabl)da Pa& eS%pport nesnesine, balklar, alttakileri ve a r&lar a"mas iin i"in verilir# .in! %de =ta& et"pe.ih? ostream 6Pa& eP"peHHinsert(ostream6 ostr) !onst< i#(+d$n[o(s) ret%rn ostr / d$ta& eS%pport.set>aram(ostrd$n[o(s, d$!o Ridth, d$(idthP"pe,,ST%a Ridth X d$ma'Ridth H 7) / #or(%nsigned ro(,7/ ro(-d$n[o(s/ ro(++)< d$ta& eS%pport.h ine(ro() / #or(%nsigned !o ,7/ !o -d$nCo %mns/ !o ++)< %nsigned !o (idth,(idth(!o ) / d$ta& eS%pport.v ine(!o ) / ostr--set((!o (idth)--stringMt(ro(, !o ) / I d$ta& eS%pport.v ine( ) / I d$ta& eS%pport.h ine( ) / ret%rn ostr / IJJJHK WW Pa& eS%pport % g%lamasnn geri kalan almalarn si"e brak )r%m# 7eri kalan elerin )% private dir# $%nlarn arasnda aadaki iki e Cro(DC!o %mnD tabl) !esini d!ndrr# 9ani ata ve dike d)ld%r%lan tabl) !eleri# stdHHstring !onst6 h;nde'(%nsigned ro(, %nsigned !o ) !onst< ret%rn d$stringCro(0d$nCo %mns+!o D /

I stdHHstring !onst6 v;nde'(%nsigned ro(, %nsigned !o ) !onst< ret%rn d$stringC!o 0d$n[o(s+ro(D / I =estek sn+ Pa& eS%pport balklar, alt ksmdakiler, a r&lar ve dierleri iin k%llanlr# $% g!revlerin erine getirilebilmesi iin G sanal e b%l%n%r -ve sanal ap& tabii ki/# ?? h ine(%nsigned ro(;nde')* b%, !eler ro(;nde' satrnda g!rnmeden hemen !n&e arlr# ?? h ine( )* s)n satr g!sterildikten hemen s)nra arlr# ?? v ine(%nsigned !o ;nde')* b%, !e !o ;nde' k)l)n%nda g!sterilmeden hemen !n&e arlr# ?? v ine( )* b%, satrda btn !eler g!sterildikten hemen s)nra arlr#

Ba 3p S3n3# ar Ae N%va anma


$ir sn+ bir kalp sn+ta %valand "aman, kendisi de )t)matik )larak kalp sn+ )l%r# 9%valanm sn+ kendisini k%atan kalp sn+n deikenlerini k%llanabilir# $% aada er alan iskelet pr)gramda g!rlr# >trAe!tor sn+nn iinde bir iterator sn+ tanmlan )r# 9%valanm sn+, bilgilerini kendisini k%atan >trAe!tor-P"pe* sn+ndan elde eder# $% k%atan sn+ inele i&ileri ina eden tek sn+ )ld%% iin, iterat)r %n ap& ilevi private aplr# K%atan sn+a reverse$iterator %n private elerine erimesi iin kstl #riend bildirimi aplr# 8te >trAe!tor sn+ ara "nn ilk ksm* temp ate -t"pename P"pe* ! ass >trAe!torH p%& i! stdHHve!tor-P"pe0 * stdHHve!tor ana sn+ P"pe deerleri deil, deerlerinin g!stergelerini saklar# 'rtk tabii bir k& ileve gerek var# :ira bellein -dardan getirilip erletirilmi/ P"pe nesnelerinden temi"lenmesi gerek# $aka bir seenek )larak* eni !elerin saklanmas >trAe!tor n g!revleri arasna erletirilir# >trAe!tor n mterisi gereken bellek erleimini apt kab%l edilir, daha s)nra da k& ilev % g%lamas gereklenir# 9%valanm sn+, ap&sn private e )larak tanmlar# 8"in verildii iin >trAe!tor-P"pe* nesneleri )n%n private elerine eriebilir# $%ndan

d)la sade&e k%atan sn+ >trAe!tor-P"pe* tipinin nesnelerine, )nlarn iterator nesnelerini ina etmelerine i"in verilir# $%n%n annda, >trAe!tor-P"pe* mterileri k%llandklar >trAe!tor-P"pe*HHiterator nesnelerinin k)p alarn ina edebilirler# $%rada %valanm sn+ iterator, gereken #riend bildirimini de ihtiva eder# t"pename anahtar kelimesi iin bir bilgi verelim* stdHHve!tor-P"pe0 *HHiterator bir kalp deikenine bal )ld%% iin, evet bir anlk sn+ d%r%m% deildir, b% "den iterator bir i t"pename dir# t"pename atlana&ak )l%rsa, derle i&i %ns%rlar b%ndan d)la % arlarda b%l%n%r# $% gibi d%r%mlarda aplmas gereken t"pename a"maktr# $%nlardan baka, ana sn+n &egin( ) esi arlarak da d$&egin balatlr* ! ass iterator< #riend ! ass >trve!tor-P"pe* / t"pename stdHHve!tor-P"pe0 *HHiterator d$&egin / iterator(>trAe!tor-P"pe*6 ve!tor) H d$&egin(ve!tor.stdHHve!tor-P"pe0 *HH&egin( )) <I p%& i!H P"pe6 operator0( )< ret%rn 00d$&egin / I I/ Sn+n geri kalan b!lm ga et k)la # U g%lanan dier btn ilevler atlanr, &egin( ) eni ina edilmi >trAe!tor-P"pe*HHiterator nesnesi d!ndrr# iterator sn+ kendisine #riend )lan k%atan sn+ arm )ld%%ndan, ap& ilev arlr* iterator &egin( )< ret%rn iterator(0this) / I (imdi de main( ) i verelim, b%rada %valanm sn+ iterator k%llanl )r# int main( )< >trAe!tor-int* vi / vi.p%sh$&a!k(ne( int(dddd))) /

>trAe!tor-int*HHiterator &egin,vi.&egin( ) / stdHH!o%t--0&egin--end / I Kalp sn+larda %valanm en%m lar ve t"pede# ler da tanmlanabilir# Pa& e sn+ daha !n&eki b!lmlerden birinde belirtildii "ere Pa& eP"peHHai Uire!tion sa latrlmasndan -en%merati)n/ )rta a kar# Ter 6able tam bir kalp sn+ )larak % g%lansa d, ) "aman sa latrma aadaki gibi Pa& e n kendisinde tanmlanrd* temp ate -t"pename ;terator* ! ass Pa& eHHp%& i! Pa& eP"pe< p%& i!H en%m ai Uire!tion< corzonta / Aeti!a / I/ ..... I/ $% d%r%mda kalp tip deikeninin deeri m%tlaka ai Uire!tion deerine ve a tipine ait )ld%% "aman belirtilmek ")r%ndadr# <rnek -iter ve nC)ls deerlerinin tanmland kab%l edilerek/* Pa& e-istream$iterator-string* *HHai Uire!tion dire!tion , arg! ,, 1 X Pa& e-istream$iterator-string* *HHAerti!a H Pa& e-istream$iterator-string* *HHcorizonta / Pa& e-istream$iterator-string* * ta& e(iter, istream$iterator-string*( ), nCo s, dire!tion) /

Nine e"i!i erin ]n2as3


$% ksm Standart Kalp Sn+lardan -SKK/ s)nra )k%rsan" daha i i piirirsini"## 9ine de seim si"in# 9inele i&iler -iterat)rs/ g!sterge gibi davranan nesnelerdir# )k sa da deiik tipte inele i&i b%l%n%r* Onp%tOterat)rs, O%tp%tOterat)rs, Y)r_ardOterat)rs, $idire&ti)nalOterat)rs ve ]and)m'&&essOterat)rs#

$%nlarn btn a rntlar daha s)nraki b!lmde, standart kalp ktphanelerinde -SKK/ ele alna&ak# 'ma btn inele i&iler artma ilemini, da an k%rtarma ilemini ve eitlik -ve a eitsi"lik/ karlatrma ilemlerini desteklerler belirtelim# $%n%n annda, inele i&iler kalp alg)ritmalar ile balantl k%llanldklarnda ba" !"el gerekleri de karlamak ")r%ndadrlar# $%n%n nedeni* kalp alg)ritmalarnn inele i&ilerin aldklar tipleri denetlemelerinden ka naklanr# $asit g!stergeler genel )larak kab%l edilir, ama eer inele i&i nesne k%llanlrsa, inele i&inin g!sterdii tipin eidi belirtilebilir )lmaldr# $ir sn+ nesnesini inele i&inin belli bir tipi )larak )r%mlamak iin, sn+ m%tlaka ! ass iterator dan tretilmelidir# Kalp sn+n ilk deikeni inele i&inin !"el tipini tanmlar, ve inele i&inin iaret ettii !"el veri tipi de kalp sn+n ikin&i deikenin&e tanmlanr# $ir sn+ iterat)r sn+ndan tretilmeden !n&e aadaki balk d)s as m%tlaka eklenmelidir* .in! %de -iterator* 6retilen sn+ tara+ndan % g%lanan inele i&inin !"el tipi iterator$tag k%llanlarak belirtilir# $% da iterator sn+nn ilk kalp deikenin&e salanr# $% eklentiler -tag ler/ * SS stdHHinp%t$iterator$tagC ;np%t;terator % tanmlar# $! le inele i&iler )k%ma ilemlerini apar# $%n% ilk !eden s)n !e e kadar inele i&i inele erek gerekler# SS stdHHo%tp%t$iterator$tagC `%tp%t;terator % tanmlar# 'tama ilemlerini apar# ' n ekilde ilk !eden s)n !e e kadar ineleme le gereklenir# SS stdHH#or(ard$iterator$tagC aor(ard;terator % tanmlar# 'tama ve )k%ma ilemlerine i"in verir# 9%kardakiler gibi ilk !eden s)n !e e kadar inelenerek gereklenir# SS stdHH&idire!tiona $iterator$tagC Bidire!tiona ;terator % tanmlar# Ok%ma ve atama ilemlerine i"in verir# 'dm adm her iki !ndede )labilen ineleme ile btn !eler inele i&i tara+ndan ilemlenir# SS stdHHrandom$a!!ess$iterator$tagC [andomM!!ess;terator % tanmlar# Ok%ma ve atama ilemlerini gerekler# 7eliig"el admlarla her iki !ndede )labilen ineleme ile btn !eler inele i&i tara+ndan ilemlenir# $%radaki geliig"el adm m%tlaka % g%n )lmaldr# 3er inele i&i eklentisi -tag/ belli ba" ilelerin )ld%%n% batan kab%l eder# [andomM!!ess;terator en karmak inele i&i )l%p aslnda btn

dier inele i&ileri ima eder# 9inele i&iler her "aman belli bir b!lgede tanmlanr# <rnek* C&egin, end)# S)n% inele i&i deeri b% deerlerin dna karsa, artrma ve eksiltme ilemleri tanms" )l%r# )%nl%kla inele i&iler sade&e ait )ld%klar di"ilerin !elerine eriirler# 8erde ise bir inele i&i bildik g!sterge k%llanabilir# 'ma bir inele i&i iin kendi belleine erleim hemen hemen hi gerekme"# $%ndan d)la k)p a ap& ilev ve bindirilmi atama ile&i bellee erletirme ")r%nl%l%% d% ma"lar# $indirilmi atama ile&i ile k)p a ap& ilevin varsa lan % g%lamas eterli )l%r# 9ani genellikle b% eler hi k%llanlma"lar# ' r&a b%n%n bir s)n%&% )larak, k& ilev de a r&a gerekme"# 9inele i&ileri d!ndren eleri !neren sn+larda )%nl%%n apt* gereken inele i&ileri ina eden elere sahip )lmaktr, ki hemen b% e ilevler tara+ndan nesne )larak d!ndrlr# $% e ilevlerin ar&s )larak, a sade&e d!nen inele i&i nesneler k%llanlmak ")r%ndadr a da, arasra d!nen inele i&i nesneler k)p alanmak ")r%ndadr# Olaan k)%llarda p%& i! ap& ilevlere gerek )lmamasna ramen, k)p a ap& ilevler b%ndan istisnadr# $% "den b% ap& ilevler a private ve a prote!ted eler )larak tanmlanrlar# K%atan sn+a inele i&i nesneler )l%t%rma i"ni vermek iin, inele i&i sn+ dardaki k%atan sn+ #riend )larak bildirir# 'adaki b!lmlerde en kark inele i&iler )lan ]and)m'&&essOterat)r ve ters ]and)m'&&essOterat)r %n ina sreleri in&elene&ek# Kendisi iin gelitirilen rastgele eriimli inele i&i ")r%nl%l%%ndan, kap sn+ veri !elerini deiik ekillerde saklar# <rnein* +arkl kaplar k%llanmak, g!stergelere g!stergeler k%llanmak gibi## $%ndan d)la )k geni kapsaml bildik -kap/ sn+lar iin genel bir kalp inele i&i sn+ ina etmek )k ")rd%r# 'adaki b!lmlerde eldeki stdHHiterator sn+, rastgele eriim inele i&isini temsil eden i ksmdaki sn+ ina eder# Ola a b% ekilde aklamak inele i&i sn+n ina edilme sre&ini aka g!sterir# Ok%r, !tekilerle balantl inele i&ileri ina ettii "aman a b% aklam i"ler, a da btn bir kalp inele i&i sn+ ina edebilir# $%na ben"er bir !rnei de ileride vere&ei"# 'ada ina ede&eimi" inele i&inin ama&* sade&e eriebilen g!stergeler ara&l ile, !eler di"isinin belli !elerine varan inele i&ileri gereklemektir# 9inele i&i sn+, string g!stergelerin vekt!rnden tretilen bir sn+n i sn+ )larak ina edilir#

)[andomM!!ess;terator) W"g% amas3


$ir s)nraki b!lmde kap sn+lardan bahsedilirken g!re&eini" gibi, kap sn+lar ierdikleri bilgilerin sahibidirler# Kap sn+larda nesneler b%l%n%rsa ) "aman b% nesneler kap sn+lar )k edildiinde )k )l%rlar# 7!stergeler nesne deillerse, a%to$ptr nesneleri kaplarda saklanam )rsa, kaplar iin g!sterge veri tipleri k%llanmak anl )l%rd%# 3ere e ramen belli d%r%mlar iin g!sterge veri tiplerini k%llanabiliri"# 'aadaki String>tr bildik sn+ stdHHve!tor kap sn+ndan tretilmi )l%p, veri tipi )larak stdHHstring0 k%llanlmtr# .i#nde# $ ;VCLWUSU$SP[;V\>P[$c .de#ine $ ;VCLWUSU$SP[;V\>P[$c .in! %de -string* .in! !%de -ve!tor* ! ass String>trH p%& i! stdHHve!tor-stdHHstring0 *< p%& i!H String>tr(String>tr !onst6 other) / KString>tr( ) / String>tr6 operator,(String>tr !onst6 other) / I/ .endi# BBBCJS6]OA7K6]JCBB 9k& ileve dikkat edelim* nesneler string g!stergeleri saklarken, String>tr nesnesi kendini imha ettii "aman - ani sildiinde/ string leri silmek iin bir k& gerekir# ' n ekilde bir k)p a ap& ilev ve bir de atama ile&i gerekir# <br eler -!"ellikle ap&lar/ b% b!lme la"m )lmadklarndan aka belirtilmeleri gerekmemitir# (imdi String>tr nesneleri ile sort( ) kalp alg)ritmasnn k%llanldn kab%l edelim# $% alg)ritma iki tane [andomM!!ess;terator gerektirir# 'nlan inele i&iler b%l%nmasna ramen -stdHHve!tor n &egin( ) ve end( ) eleri ara&l ile/, b%nlar stdHHstring0 e inele i&iler d!ndrrler, ki b% bi"e % g%n deildir# 'nlan s)r%n% !"mek iin String>trHHiterator i tipini tanmladm" kab%l edelim, b% g!stergelerin inele i&ilerini d!ndrme ip, anlan g!stergelerin iaret ettii nesnelerin inele i&ilerini d!ndrr# $%

iterator tipi bir ke" salandm, aadaki eleri String>tr sn+ ara "ne ben"er adlar gi"le erek ekleri", ama b%nlar )n%n ana sn+nn +a das" eleridir* String>trHHiterator &egin( ) / String>trHHiterator end( ) / BBilk !enin inele i&isini d!ndrr# BBs)n !eden s)nrasnn inele i&i isini d!ndrr#

$% iki e % g%n inele i&ileri d!ndrd iin, String>tr nesnesinde b%l%nan !eler k)la &a sra a k)nabilir# int main( )< String>tr sg / BBsg nin bir ekilde d)ld%r%ld%% kab%l edi i"or sort(sg.&egin( ), sg.end( )) / BBsg sra a di"ildi ret%rn 7 / IJJJHK $%n%n tam )larak almas iin String>trHHiterator tipinin m%tlaka tanmlanmas gerekir# 6ipin adnda da anlala&a "ere iterator, String>tr nin %valanm sn+dr# $%n%n annda String>trHHiterator % sort( ) kalp alg)ritmas ile k%llanlabilmesi iin, inele i&i m%tlaka [andomM!!ess;terator )lmaldr# $%ndan d)la String>trHHiterator %n kendisi bi""at var)lan stdHHiterator dan tretilmi )lmaldr# $% da aadaki !nilemle i&i !nergesi tara+ndan belirtilir* .in! %de -iterator* $ir sn+ stdHHiterator sn+ndan tretmek iin, hem inele i&i tipi hem de inele i&inin iaret ettii veri tipi m%tlaka belirtilmelidir# =ikkat edile&ek n)kta* inele i&imi" string0 da antan k%rtarma iini g!r )r, b% "den gerekli veri tipi stdHHstring )l%r, stdHHstring0 deil# $! le&e iterat)r sn+ ara " aadaki ekilde balar* ! ass iteratorH p%& i! stdHHiterator-stdHHrandom$a!!ess$iterator$tag, stdHHstring* $%n%n ana sn+ belirtimi )k kark )ld%% iin t"pede# k%llanarak b% tip adn ksalta&a"#

t"pede# stdHHiterator-stdHHrandom$a!!ess$iterator$tag, stdHHstring* ;terator / 'rtk String>tr sn+ ara "n %valanm sn+ iterator a kadar eniden tasarla abiliri"* ! ass String>trH p%& i! stdHHve!tor-stdHHstring0 *< t"pede# stdHHiterator-stdHHrandom$a!!ess$iterator$tag, stdHHstring* ;terator / p%& i!H ! ass iteratorH p%& i! ;terator / (imdi String>trHHiterator %n !"elliklerine bakalm* SS iterator, String>tr i #riend )larak tanmlar, b% "den iterator %n ap& ilevi private )labilir* aplabile&ek en anlaml e String>tr nin sade&e bi""at kendisinin iterator lar ina edebile&eidir# $%nlardan baka StringKtr nin ana sn+ bir iterat)r salam )ld%%ndan, StringKtr nesnelerindeki bilgilere b% iterat)r la eriilebilir, b! le&e iterat)r %n private ksm aadaki gibi )l%r* #riend ! ass String>tr / stdHHve!tor-stdHHstring0 *HHiterator d$!%rrent / iterator(stdHHve!tor-stdHHstring0 *HHiterator !onst6 d$!%rrent) H d$!%rrent(!%rrent) <I SS iterator nesneleri String>trHH&egin( ) ve String>trHHend( ) elerin&e d!ndrlr# $%nlar String>tr sn+nda satrii )larak tanmlanrlar# 8te* iterator &egin( )< ret%rn iterator(this4*stdHHve!tor-stdHHstring0 *HH&egin( )) / I iterator end( )< ret%rn iterator(this4*stdHHve!tor-stdHHstring0 *HHend( ) ) / I SS iterator %n geri e kalan btn eleri p%& i! tir# $%nlarn

gereklenmeleri )k k)la dr# 6emelde, verilen d$!%rrent inele i&isini da antan k%rtarr ve !"el hallere s)kar# $ir [andomM!!ess;terator % tanmlarken, en a"ndan m%tlaka aadaki ileler k%llanmda b%l%nmaldr* iterator6 operator++( ) C !nartm ile&i iterator6 operator++( )< ++d$!%rrent / ret%rn 0this / I iterator6 operator44( ) C !na"altm ile&i iterator6 operator44( )< 44d$!%rrent / ret%rn 0this / I iterator operator44( ) C s)nradan a"altm ile&i iterator !onst operator44(int)< ret%rn iterator(d$!%rrent44) / I iterator6 operator,(iterator !onst6 other) C $indirilmi atama ile&i# iterator nesnelerin kendileri bellek alanna erleim apmadklarndan, b%n% varsa lan atama ile&i gerekler# &oo operator,,(iterator !onst6 rhv) !onst C iki iterat)r nesnesinin eitliini snamak iin k%llanlr# &oo operator,,(iterator !onst6 other) !onst< ret%rn d$!%rrent ,, other.d$!%rrent / I &oo operator-(iterator !onst6 rhv) !onst C sa ve s)l anlardaki inele i&ilerin !elerini snamakta k%llanlrC

&oo operator-(iterator !onst6 other) !onst< ret%rn 00d$!%rrent - other.00d$!%rrent / I int operator4(iterator !onst6 rhv) !onst C s)l an inele i&isi ile sa an inele i&isi arasnda iaret edilen !elerin sa sn d!ndrr# int operator4(iterator !onst6 rhs) !onst< ret%rn d$!%rrent4rhs.d$!%rrent / I P"pe6 operator0( ) !onst C O anki inele i&inin iaret ettii nesnenin da an&n d!ndrr# $ir ;np%t;terator ve btn !onst$iterator lerle, b% bindirilmi ile&in d!n tipi P"pe !onst6 )lmas la"mdr# $% ile bir string e da an d!ndrr# $% string ise d$!%rrent deerinin da ans" halinin da an& ara&l ile salanr# d$!%rrent, string0 !elerinin bir inele i&isidir, string in kendisine varabilmek iin iki tane da antan k%rtarma ilemi gerekirC stdHHstring6 operator0( ) !onst< ret%rn 00d$!%rrent / I iterator !onst operator+(int stepsize) !onst C $% ile ) anki inele i&i i adm b kl kadar ilerletir# iterator !onst operator+(int step) !onst< ret%rn iterator(d$!%rrent+step) / I iterator !onst operator4(int stepsize) !onst C $% ile ) anki inele i&i i adm b kl kadar a"altr# iterator !onst operator4(int step) !onst< ret%rn iterator(d$!%rrent4step) / I 9inele i&ileri var)lan inele i&ilerden de ina etmek mmkndr# $%rada ap& k%llanmak ")r%nl%l%% )kt%r, b%n%n erine varsa lan

k)p a ap& k%llanlabilir# stdHHstring0 operator4*( ) !onstC ilave bir eklenme ile&idir# $%rada sade&e bir tane da antan k%rtarma ile&i gerekir, string g!stergei d!ner, g!sterge ara&l ile string !elerine eriime i"in verilir# stdHHstring0 operator4*( ) !onst< BB inele i&inin iaret ret%rn 0d$!%rrent / BBettii str%&t alanlarna I BBeriim, !rnekC it?5length- / $%nlardan baka iki tane daha eklenme ile&i b%l%n%r* operator+( ) ve operator4( ) # $%nlar [andomM!!ess;terator tara+ndan resmen istenme" ama k%llanmn bilmelidir# iterator6 operator+,(int step)<BB inele i&i i n adm arttr d$!%rrent+,step / ret%rn 0this / I iterator6 operator4,(int step)<BB inele i&i i n adm a"alt d$!%rrent4,step / ret%rn 0this / I <teki inele i&iler iin gereken ara " daha basittir# ]astgele eriimli inele i&i e gereken arar "n sade&e alt kmesi b%nlar iin eterlidir# <rnek )larak* !n& inele i&i -aor(ard;terator/ hibir "aman rastgele adm b kl ile ne a"altlr ne de arttrlr# $% "den !n& inele i&ilerde b% g!revleri erine getiren ilevler ara "den karlabilir# 6abii ) "aman k%llanla&ak %"ant stdHH#or(ard$iterator$tag )l%r#

reverse$iterator W"g% amas3


$ir inele i&i bir ke" gerekletirildimi, b%na % g%n reverse$iterator da kala g!" arasnda hemen % g%lanabilir# stdHHiterator a g!re stdH.reverse$iterator b%l%nd%%ndan, bir inele i&i sn+ ina ettiimi"de ters inele i&i bi"im iin ga et g"el ina edilir# 8na etmek istediimi" ters inele i&i iin, ap& ilevi inele i&i tipin nesnesine ihti a d% ar#

String>tr e ters inele i&i gerekletirmek iin, ihti a d% %lan tek e ara "de reverse$iterator tipini tanmlamaktr# $% da iterator sn+nn ara "nden s)nra bir satr k)d eklememi"i gerektirir* t"pede# stdHHreverse$iterator-iterator* reverse$iterator / S)n )larak String>tr in ara "ne r&egin( ) ve rend( ) eleri eklenir# $%nlar ga et g"el bir ekilde satrii )larak % g%lanr* reverse$iterator r&egin( )< ret%rn reverse$iterator(end( )) / I reverse$iterator rend( )< ret%rn reverse$iterator(&egin( )) / I revese$iterator ap& ilevin ald verilere dikkat edelim* terslenmi inele i&inin balang n)ktas reverse$iterator %n ap&s end( ) e ile beraberken elde edilirC end- / ani inele i&i alannn s)n n)ktas demektir b%# 6erslenmi inele i&inin s)n n)ktas, reverse$iterator%n ap&s &egin( ) e ile beraberken elde edilirC &egin( ) ani inele i&i alannn balang n)ktas demektir# 'adaki basit pr)gram String>tr de [andomM!!ess;terator k%llanmn g!stermektedir* .in! %de -iostream* .in! %de -a gorithm* .in! %de =stringptr? %sing namespa!e std / int main(int arg!, !har00 argv)< String>tr sp / (hi e(0argv) sp.p%sh$&a!k(ne( string(0argv++)) / sort(sp.&egin( ), sp.end( )) / !op"(sp.&egin( ), sp.end( ), ostream$iterator-string*(!o%t, = =)) / !o%t--?En,,,,,,En? / sort(sp.r&egin( ), sp.rend( )) / !op"(sp.&egin( ), sp.end( ), ostream$iterator-string*(!o%t, = =)) / !o%t--end / I

BB (hen !a ed asH z.o%t izmir tire anado % % %s se ami generated o%tp%tH z.o%t izmir anado % tire se ami % %s ,,,,,, % %s se ami tire anado % izmir z.o%t JJ

b%ras b) brakld

9. BLM

Standart Ba 3p Btphanesi (SBB) ve M goritma ar


Standart Kalp ktphaneleri -standart template librar .S6L/* kaplar -&)ntainers/, kalp alg)ritmalar -generi& alg)rithms/, inele i&iler -iterat)rs/, ilev nesneleri -+%n&ti)n )bee&ts/, % arlatr&lar -adapt)rs/ ve bellek erletiri&ilerden -all)&at)rs/ me dana gelmitir# SKK, veri aplar

ve alg)ritmalardan )l%an genel amal bir ktphanedir# 'lg)ritmalarda k%llanlan veri aplar anlam bakmndan s) %t )l%p, alg)ritmalar % g%lamada her veri tipi ile k%llanlabilir# 'lg)ritmalar b% s) %t veri tipleri "erinde alabilir, "ira b%nlar kalp tabanl alg)ritmalardr#

SBB Wns%r ar3


9%karda belirttiimi" gibi Standart Kalp Ktphanesi ga et i i aplandrlm +arkl paralarn birleiminden )l%m%t%r# SKK nn anahtar %ns%rlar kaplar -&)ntainers/, inele i&iler -iterat)rs/ ve alg)ritmalardr -alg)rithms/# SS Bap ar -&)ntainers/ C $elli !"ellikteki nesneler t)pl%l%%n% !netmek iin k%llanlrlar# 3er eit kap kendi stnlk ve sakn&alarna sahiptir# $%ndan d)la +arkl kap tipleri, pr)gramlardaki t)pl%l%klarn +arkl gereksinimlerini karlar# Kaplar di"iler -seg%en&e/ ve a ilikili -ass)&iative/ listeler )larak ha"rlanrlar# 9a da her !e iin !"el bir anahtara sahiptirler# SS Nine e"i!i er -iterat)rs/C Aesne t)pl%l%klarndaki !elerin arasnda d)lamak iin k%llanlrlar# $% t)pl%l%klar, kap ve a kaplarn alt kmeleri )labilir# 9inele i&ilerin esas stnl, herhangi bir kap tipi iin kk ama )rtak ara " salamasdr# <rnek )larak* ara "n bir ilemi inele i&inin admn t)pl%l%ktaki bir s)nraki !e e g!trr# $% ilem t)pl%l%%n i apsndan bams" gereklenir# 9ani "erinde allan t)pl%l%%n di"i ve a aa )l%p )lmad dikkate alnma"# $%n%n nedeni her kap tipi kendi inele i&isine sahiptir, b%nlar da kap sn+nn i apsn bildiinden inele i&i hep d)r% )lan apar# 9inele i&ilerin ara ", bildik g!stergeler iin )lanlarla hemen hemen a ndr# 9inele i&i i bir artrmak iin operator++ ile&i arlr# 9inele i&inin herhangi bir deerine ise eriebilmek iin ise, operator0 ile&i k%llanlr# 9ani inele i&i Xbir s)nraki !e e git[ arsn X% g%n )lana git[ e eviren bir eit &ing!" -smart/ g!stergetir# SS M goritma ar -alg)rithms/C 6)pl%l%k !elerini ilemlemek iin k%llanlrlar# <rnein* deiik amalar iin !eleri aratrabilir, sra a k) abilir, deitirebilir ve a basit ekilde k%llanabilir# 'lg)ritmalar inele i&ileri k%llanrlar# $! le&e herhangi bir kapla alan bir alg)ritma sade&e bir ke" a"lr, "ira inele i&iler iin inele i&i ara " btn kap tipler iin )rtaktr# 'lg)ritmalara esneklik ka"andrmak ama& ile alg)ritmalarn arabildii, belli ba" ardm& ilevleri de si"

ekle ebilirsini"# $% sa ede genel bir alg)ritma ihti alarn"a % g%n hale getirip k%llanabilirsini"# 3atta b% ihti a )k karmak ve a )k !"el )lsa bile# <rnein* kendini"e !"g aratrma kstaslarn" ve a !eleri birara a getiren !"el ilem )l%t%rabilirsini"# SKK dn&esi veri ve ilemlerin a rlmas temeline da anr# Kap sn+lar verileri !netir, d"enlenebilir alg)ritmalar ilemleri tanmlar, ve inele i&iler b% iki %ns%r% aptrr# 9ani inele i&iler herhangi bir alg)ritma ile herhangi bir kap arasnda iliki salar# SKK dn&esi, nesne !nelimli pr)gramlama ile ters derC SKK veri ile alg)ritmalar birletirmekten "i ade birbirinden a rr# $%n% b! le apmann nedeni )k !nemlidir# 8lke )larak her eit kab her eit alg)ritma ile birletirebilirsini", ereve hala kk )lmasna ramen s)n% ga et esnektir# SKK nin bir temel tavr da btn %ns%rlarnn rastgele tiplerle almasdr# 'dnda anla a&an" gibi Standart Kalp Ktphanesinin -SKK/ btn %ns%rlar, tipler iin kalplardr -verilen tipler gereken ilemleri gerekler/# $%ndan d)la SKK, kalpla pr)gramlamann -generi& pr)gramming/ i i bir !rneidir# Kaplar ve alg)ritmalar, tipler ve sn+lar iin d)%mhanelerdir# SKK )ld%ka d)%rgan %ns%rlar salar# <"el amalar iin belli % arla &lar -adapters/ ve ilev nesneleri -+%n&ti)n )bee&ts ve a +%n&t)rs/ k%llanarak, alg)ritmalar ve ara "leri destekle ebilir, kstla abilir ve a d"enle ebilirsini"# (imdi b%nlar !rneklerle adm adm ilerle erek anlata&a"#

Bap ar
Kap sn+lar ve a ksa&a kaplar, !eler t)pl%l%%n% !netir# Yarkl ihti alar gidermek iin SKK +arkl kaplar salar# 7enel )larak iki eit kap b%l%n%r* D? =i"i kaplar -seg%en&e &)ntainers/, her !enin belli bir erde b%l%nd%% d"enlenmi t)pl%l%klardr# <e eri, erletirmenin "aman ve mevkisin&e saptanr# $% d"en, !e deerinden bams"dr# <rnein* bir t)pl%l%a edi !e i herbiri !tekinin ardna gele&ek ekilde k) arsan", !eler tam )larak si"in erletirdiini" d"endedir# SKK !ntanml )larak F tane di"i kap sn+ b%l%nd%r%rC ve!tor, deT%e, ve ist# E? 8likili kaplar -ass)&iative &)ntainers/, !e erinin belli bir sralama kstasna bal )larak, deerine g!re belirlendii sralanm t)pl%l%klardr# $ir t)pl%l%a edi !e k) arsan", b%nlarn d"eni deerlerine baldr#

9ani erletirme sras deil erletirilenin deeri !nemlidir# SKK da G tane !ntanml ilikili kap sn+ b%l%n%rC set, m% tiset, map ve m% timap. 8likili kaplar !"el bir eit di"i kab )larak dnlmelidir# :ira )nlar belli bir sralama kstasna g!re d"enlenmi t)pl%l%klardr#

Uizi Bap ar3


'ada eralan di"i kaplar, SKK da !ntanml )larak b%l%n%rlar# WW ve!tor ler WW deT%e ler WW ist ler 9%kardakilere ek )larak string leri ve n)rmal di"ileri -arra / de di"i kaplar )larak k%llanabilisini"#

)ve!tor) er
ve!tor, !elerini dinamik bir di"ide !netir# =enk gelen di"in n%maras a"ldnda, rastgele eriime i"in verilir# =i"inin s)n%ndaki ere !e erletirmek ve )radan !e silmek )k h"l gereklenir# $%n%nla beraber, di"inin )rta erine ve a bana !e erletirmek "aman alr# Sebebi ise, ilgili ere !e erletirirken gerekli eri b)altmak iin takip eden btn !elerin hareket etmeleridir# (imdi bir !rnekle ve!tor k)n%s%n% in&ele elim# <rneimi"de D@ tane int sa s b%l%nd%ran ve!tor b%l%nmaktadr ve ve!tor !eleri daha s)nra ka a"drlmaktadr# BB$@HCve&t)rD#&pp BBD@ tane int !eli vekt!r .in! %de -iostream* .in! %de -ve!tor* %sing namespa!e std/ int main( )< ve!tor-int* depo / JJint !elerin k)nd%% dep) ve&t)r #or(int i,1/ i-,17/ ++i)< depo.p%sh$&a!k(i) / IJBdeerleri D den D@ a kadar )lan int !eleri dep) a erletiri )r# #or(int i,7/ i-depo.size( )/ ++i)< !o%t--depoCiD--) ) /

IJJbtn !eleri bir b)l%k brakarak a"dr !o%t--end / IBBB .in! %de -ve!tor* balk d)s as ve!torleri )l%t%rmak iin eklenir# ve!tor-int* depo / bildirimi int tipinde dep) adnda ve!tor )l%t%r%r# $%rada herhangi bir ilk deer atamas aplmad iin, ap& ilev tara+ndan b) dep) )larak )l%t%r%l%r# p%sh$&a!k(i) ilevi kap s)n%na bir !e ekler# $% e ilev btn di"i kaplar -seg%en&e &)ntainer/ iin k%llanlabilir# depo.p%sh$&a!k(i) / size( ) e ilevi kap iindeki !elerin t)plam sa sn verir# #or(int i,7/ i-depo.size( )/ ++i)< .... I size( ) e ilevi de herhangi bir kap sn+ iin k%llanlabilir# K!eli a ralar k%llanarak ve!tor n herhangi bir !esine eriilebilir# !o%t--depoCiD--) ) / standart ktdan elde edilen s)n% aadaki gibi )l%r* 1 1 5 8 9 : F d e 17

)deT%e) er
deT%e terimi ingili"&ede Xd)%ble ended T%e%e[ ani i+t %l% k% r%k tanmndan gelir# 3er iki d)r%lt%da genile ebilen dinamik di"i anlamndadr# <elerin k% r%k ba ve a s)n%na eklenmesi )k h"l gereklenir# 'ma !enin )rta ksma erletirilmesi, takip eden btn !elerin er deitirmesi "nden %"%n srer# <rneimi", deT%e kabnn ba ksmna erletirilen D#D den R#R e kadar )lana ka an n)ktal sa lar, ve )nlarn ka a"drlmas g!stermektedir# BBC$@HCdeg%eD#&pp

BBka an n)ktal sa larn b%l%nd%% deg%e .in! %de -iostream* .in! %de -deT%e* %sing namespa!e std / int main( )< deT%e-# oat* depo/ JBdep) isimli deg%e +l)at !eleri b%l%nd%r% )r# #or(int i,1/ i-,e/ ++i)< depo.p%sh$#ront(i01.1) / JB!n ksma erletir I BBbtn !eleri E b)l%kla a"dr #or(int i,7/ i-depo.size( )/++i)< !o%t--depoCiD--) )/ I !o%t--end / IJJJ deg%e ler iin aadaki balk d)s as eklenir .in! %de -deT%e* aadaki bildirim ise +l)at tipleri barndran dep) adl b) bir deg%e )l%t%r%r* deT%e-# oat* depo / !eleri erletirmek iin ise aadaki ilev k%llanlr* depo.p%sh$#ront(i01.1) / p%sh$#ront( ) e ilevi, eni !enin t)pl%l%k bana erletirilmesini salar# $% eit erletirme !elerin ters sralamada d"enlenmesine )laar# :ira her eni !e bir !n&eki !enin !nne erletirilir# $% "den pr)gramn kts aadaki gibi )l%r* e.e d.d F.F :.: 9.9 8.8 5.5 1.1 1.1 $ir deT%e kabna p%sh$&a!k( ) e ilevi ile, !eleri arka tara+tan da erletirmek mmkndr# ve!tor lerde p%sh$#ront( ) e ilevi )kt%r ve k%llanlma" eer ve!tor lerde t)pl%l%%n en bana !e erletirmek isterseni" )k verimsi" )l%r, "ira btn !elerin er deitirmesi

gereke&ektir# Ksa&a, bir t)pl%l%%n bana !e erletirmek isterseni", deT%e kabn k%llanmak daha akll&a )l%r# SKK kaplarnda birbirinden +arkl )lan e ilevler, "aman verimli k%llanma a ardm ederler#

) ist) er
$ir ist i+t bal !elerin b%l%nd%% liste )larak )l%t%r%l%r# $%n%n anlam* listede b%l%nan her !e bellekte kendi dilimine sahiptir ve a r&a, b% erin !n&esi ve s)nrasna baldr# ist ler rastgele eriime i"in verme"# ]astgele eriim derken bir k)n% a aklk getirelim* rastgele eriim ka+asna g!re taklp erimek deildir, b%rada eriile&ek bellek n)ktas di"in iinde verilen rakam tara+ndan belirlenir# 9ani rastgele eriimde* verilen bellek n)ktasna !teki bellek n)ktalarndan gemeden d)r%dan eriilir# 8te ist ler b%na i"in verme"# <rnek )larak* ist teki bein&i !e e erimek iin, balantlar "in&iri takip edilerek m%tlaka ilk d!rt !esinden geilmelidir# $%n%nla birlikte, bir !n&eki ve a bir s)nraki !e e erimek sabit bir sre alr# $! le&e herhangi bir !e e genel eriim "amanla d)r% )rantldr# -)rtalama %"aklk !e sa s ile )rantldr/# $% % g%lama ve!tor ve deT%e ler tara+ndan salanan sabit eriim "amanndan )k k!tdr# ist in stnl herhangi bir erdeki !enin kaldrlmasnn ve a erletirilmesinin )k h"l gereklemesidir# Sade&e balantlar m%tlaka deitirilmelidir# $%n%n anlam* ist )rtasnda er alan bir !enin er deitirmesi, ve!tor ve a deT%e de b%l%nan !enin er deitirmesine g!re )k daha h"ldr# 'adaki !rnek, karakterler iin b) bir ist )l%t%r%r, ,a, dan ,", e kadar )lan btn karakterleri erletirir, bir d!ng k%llanarak btn !eleri a"drr, a"drp daha s)nra t)pl%l%%n ilk !esini kaldrr# BBC$@HClistD#&pp BBlist kap sn+ k%llanm !rneidir .in! %de -iostream* .in! %de - ist* %sing namespa!e std / int main( )< ist-!har* depo / BBkarakter !eleri iin dep) adl list nesnesi #or(!har !,)a)/ !-,)z)/ ++!)< depo.p%sh$&a!k(!) / IBBa dan " e btn karakterleri dep) a k) ar#

(hi e(+depo.empt"( ))< !o%t--depo.#ront( )--) ) / depo.pop$#ront( ) / IJJ!eleri a"dr, !eler varken, ilk !e i a"dr ve sil ani kaldr# !o%t--end / IJJJHK Karakter deerleri t%tan ist sn+ nesnesi )l%t%rabilmek iin .in! %de - ist* balk d)s as sisteme eklenir# dep) adl ist nesnesi ise aadaki de imle )l%t%r%l%r* ist-!har* depo / ist sn+nn e ilevlerinden empt"( ) ise kapta !e )lmadn belirlemede k%llanlr# =!ng k)%l belirleme tr%e )ld%% sre&e devam eder# - ani kapta !e )ld%% sre&e/ (hi e(+depo.empt"( ))< ..... I =!ng iinde er alan #ront( ) e ilevi asl ilk !e i d!ndrr# !o%t--depo.#ront( )--) ) / pop$#ront( ) e ilevi ise ilk !e i kaldrr ani siler# depo.pop$#ront( ) / 3emen belirtelim pop$#ront( ) kaldrlan !e i d!ndrme"# $% "den !n&eki iki de im tek de imde birletirilme"# Kr)gramn kts sistemin karakter kmesine baldr# 'SCOO karakter kmesi )ld%%nda, kt aadaki gibi )l%r* a&!de#g hiQk mnopTrst%v('"z 3erhalde karakterlerin tamamn bir d!ng ile a"drmak ve ktdan elde edip ilk !e i sildirmek bira" a&a ip gelebilir# $%n%nla birlikte CD ile&ini k%llanarak ist !elerine d)r%dan erimek mmkn deildir# :ira ist !elerine rastgele eriim )lma"# 3emen belirtelim rastgele eriim ile

kastedilen ka+a a g!re taklp rastgele bir !e e erimek demek deildir, sade&e, belirtilmi herhangi bir !e e d)r%dan eriimdir# $%ndan baka bir )l daha b%l%nmaktadr* inele i&ileri -iterat)r/ k%llanp ist !eleri arasnda d)lap istenenleri apmak# ' r&a ilk b!lmm"de in&elediimi" string leri de, SKK kap sn+ )larak kab%l edebiliri"# C++ string sn+ nesneleri -&asi!$string- *, string ve (string/ ilgi alanm"a girer# string ler ve!tor lere ben"erler ama tek +ark vardr* sade&e karakterleri t%tarlar# ve!tor ve deT%e k%llanm ile ilgili dn&elerimi"i akla alm# $en"er g!revleri erine getiren gerek deT%e gerekse ve!tor den hangisi, ne "aman, nasl ter&ih edile&ekQ# C++ standartlar EF#D#D b!lmnde kap sn+ ter&ihleri ile ilgili ba" !neriler b%l%nmaktadr# Xve!tor varsa m )larak k%llanlmas la"m )lan di"i -seg%en&e/ tipidir, deT%e ise !e erletirme ve silmelerinin di"i ba ve s)nlarnda )ld%% seimin veri apsdr#[ (imdi b%rada ben ga et iten bir ekilde m%hali+ g!rm akla a&am* varsa m )larak k%llanlmas istenen ve!tor erine, deT%e i tavsi e edi )r%m# <"ellikle % g%lamada k%llanlan tipler erleik )lma an tipler ani, sn+ -&lass/ ve a str%!t tipler )ld%%nda, k%llanlmaldr# Kap belleinin bitiik )lmas gerekmedii "amanlar da b%na ekle elim# ve!tor ve deT%e hemen hemen a n ara "e ani e ilevlere sahiptirler# deT%e de, ve!tor de )lma an p%sh$#ront( ) ve pop$#ront( ) e ilevleri b%l%n%r# -evet ve!tor deki !apa!it"( ) ve reserve( ) e ilevleri deT%e de b%l%nma", ama b% stnlk deil bilakis "a +lktr/ ve!tor ve deT%e arasndaki temel ap +ark* her iki kabn i saklama d"eninden ka naklanr# $ir deg%e saklama alanndaki erleimleri sa +alar halinde apar, ve her sa +ada sabit sa da !e b%l%n%r* ite b% "den deT%e ile iskambil destesi karlatrlr, geri di"ide !elerin her iki %tan ileme tabi )lmas "nden deT%e ad, i+t %l% k% r%ktan ka naklanr -Xd)%ble ended T%e%e[/ a ne se# <te andan, ve!tor bellein bitiik paralarn k%llanr, ve !eleri sade&e di"i s)n%na etkin biimde erletirebilir# deT%e nin sa +a d"enlemesi bir)k stnle sahiptir* WW $ir deT%e, kap banda insert( ) ve erase( ) ilemlerini sabit bir srede tamamlar, ama ve!tor de b! le )lma"# Standartta belirtilen deT%e k%llanm sebebi ise* k% r%%n her iki %&%ndan ilem aplabilmesi di# WW $ir deT%e bellei, !"ellikle sanal bellei )lma an sistemlerde, iletim sistemine daha % %ml% k%llanr# <rnek )larak D@ megaba tlk bir ve!tor tek para D@ megaba tlk bellek k%llanr, D@ megaba tlk deT%e ise kk paralar halinde D@ megaba tlk bellei dilimle ip k%llanr b% "den

deT%e, bellek k%llanmnda daha verimlidir# WW $ir deT%e nin bir ve!tor e g!re k%llanm hem k)la hem de genilemesi daha verimlidir# ve!tor n app deT%e nin apamad ilemler sade&e !apa!it"( ) ve reserve( ) dir# 'slnda deT%e nin b% ilevlere ihti a& b%l%nmamaktadr# reserve( ) ilevini )k sa da p%sh$&a!k( ) ilevinden !n&e armak, ve!tor de, ) an eterli b kle sahip )lmad her se+er s)n%nda, a n tamp)n%n hep daha geni srm bellek eniden erleimlerini iptal eder# deT%e de b! le bir s)r%n b%l%nma"# )k sa da p%sh$&a!k( ) den !n&e bir deT%eHHreserve( ) )lmas herhangi bir bellek erleimi iptal etme", "ira bellek erleimlerinden hibiri iptal edilme"# deT%e hepsini bir kere de apsada, !eleri aptrsada, a n sa da ek sa +a bellee erletirmek ")r%ndadr# 8lgin )lan bir e de, standart t -sta&k/ % arla &s sade&e tek d)r%lt%da geniler, ve )rta ere ve a !teki tara+a erleim hibir "aman gerekme"# Narsa lan deT%e % g%lamas * temp ate -t"pename P, t"pename Container,deT%e-P* * t"pename sta!k< ..... I/ 'slnda here mekani"malar ve p)litikalarla ilgilidir# Kr)gram&lkta mekani"ma elde )lan btn )lanaklar )larak tanmlanabilir# Olanaklarn iinde gerek d)nanm gerekse seilen pr)gramlama dilinin etenekleri, her ikisi de dahildir# K)litikalar ise pr)gram&nn mekani"malar k%llanrken % g%lad taktikler btn, ani strateeidir# Kr)gram& )larak % g%lana&ak en temel %s%l* hede+e en ksa srede varabilen en a" masra+l )l% b%labilmektir# Kr)gram en alt d"e d)nanmla alabilmeli, en a" bellek k%llanmal ve isteneni en ksa srede gerekletirmelidir# 6abii b%n% apabilmek iin de sk bir maa la"m# $%rada % %la&ak en basit k%ral* hede+e kilitlenmektir# :ira birden +a"la tavan k)vala an hibir tavan akala ama"# <n&e k)n%n%"% )k i i bile&eksini", s)nra !"m kesin b%la&aksn", )ndan s)nra artk baardn"la bir btn )la&aksn"# S)nra bilirsini", eski bir de im vardr, insan akl nis an ile malldr denir# 9ani insan %n%t%r# $%ndan d)la app gelitirdiklerini"i a"a&aksn"# 9arn bir gn b% ne di di e s)rd%%n%"da, a"lardan hemen hatrlarsn"# Th artk b% kadar baba nasihatlardan s)nra &ann"n istediini apn# 'ma temel k%ral %n%tma n# 6erm)dinamiin temel asas "aten* minim%m enerei har&a p maksim%m i -asl karmaa ama ben ararl )ls%n di e i

dedim/ elde etmektir# $% k%ral, iitlerin btn )%rt eme eitleri iin geerlidir# (imdi gelelim kap sn+larn a rntlarna# )ve!tor) Bap

ar3

ve!tor sn+ genile ebilir di"i -arra / gibi davranr# $ir pr)gramda ve&t)r sn+ k%llanlmadan !n&e balk d)s alar arasnda m%tlaka aadaki !nerge a"lmaldr* .in! %de -ve!tor* 9ap& ilevler, ileler ve e ilevleri ise aada g!sterilmitir* WW 9ap& ilevler* ?? $ir ve!tor b) )larak ina edilebilir* ve!tor-string* o&Qe!t / ve!tor de saklanan veri tipini belirtmek iin* )ve!tor) kap adndan hemen s)nra, al a ralar arasna - ani 4 5/ veri tip ad erletirilir# $% % g%lama btn ve!tor kaplar iin geerlidir# ?? $ir ve!tor belli sa da !e ile balatlabilir# $tn kaplarn ve !"ellikle ve!tor lerin en g"el !"elliklerinden biri* veri !elerini veri !e tipinin varsa lan deerleri ile balatabilmeleridir# $% ilk deer atama ilemi iin, veri tipinin varsa lan ap& ilevi k%llanlr# Sn+s" veri tipleri - ani erleik tipler iin/ iin b% deer s+rdr -@/# $%ndan d)la int ve!tor iin ilk deer s+r -@/ )l%r# <rnekler* ve!tor-string* o&Qe!t(17, string(=se am?)) / BBD@ selam ile balar ve!tor-string* !ontainer(17) / BBD@ b) string ?? $ir ve!tor inele i&iler -iterat)r/ k%llanarakta balatlabilir# $ir ve!tor H !eden D@ a -s)n !ede dahil/ kadar balatmak iin var)lan bir ve!tor-string* ile aadaki ap k%llanlr* e'tern ve!tor-string* !ontainer / ve!tor-string* o&Qe!t(6!ontainerC9D, 6!ontainerC11D) / 8kin&i inele i&i (6!ontainerC11D) tara+ndan iaret edilen s)n !e, o&Qe!t

te saklanma"# $% !rnek inele i&ilerin k%llanld basit bir !rnektir# 8lk deerle bala an !eler ikin&i inele i&inin iaret ettii !e dnda btn aradaki deerleri kapsar# Standart g!sterim* 0begin, end/# ?? $ir ve&t)r k)p a ap& ilev k%llanarakta bala abilirC e'tern ve!tor-string* !ontainer / ve!tor-string* o&Qe!t(!ontainer) / ?? Kaplarn standart ilelerinin annda ve&t)r ler di"in ile&ini de destekler# =i"in -indeZ/ ile&i ve&t)r n !elerine eniden atama aparken ve a, ilgili di"indeki !e saptanrken k%llanlr# <rnek )larak ii b) bir ve&t)r n aadaki de imi hata retir* ive!torC7D,17 * BBhata "ira ve&t)r b)t% $%ndan d)la ve&t)r kendiliinden genile eme", ve di"i snrlarndan s)r%ml% deildir# $% d%r%mda s)r%n% !"mlemek iin !n&e ve&t)r eniden b) %tlanr, ve a ive!tor.p%sh$&a!k(17) a"lmaldr# WW ve!tor e ilevleriC ?? P"pe 6ve!torHH&a!k( ) C $% e ilev ve!tor deki s)n !enin da an&n d!ndrr# ve!tor an&ak b) deilse, e ilevin k%llanm pr)gram&nn s)r%ml%l%%ndadr# ?? ve!torHHiterator ve!torHH&egin( ) C $% e ve!tor deki ilk !e i iaret eden inele i&i d!ndrr# Ter ve!tor b) ise, ve!torHHend( ) d!ndrr# ?? ve!torHH! ear( ) C $% e ve!tor n btn !elerini siler# ?? &oo ve!torHHempt"( ) C $% e ve!tor de hi !e )ksa tr%e d!ndrr# ?? ve!torHHiterator ve!torHHend( ) C $% e ve!tor deki s)n !eden ilerdeki eri iaret eden inele i&i d!ndrr#

?? ve!torHHiterator ve!torHHerase( ) C $% e ve!tor n belli bir alanndaki !eleri silmek iin k%llanlabilir* 0erase(pos), pos inele i&isin&e g!sterilen !e i siler ve ++pos deeri geri d!ner# Werase-ilk, !tesi/, inele i&inin 0ilk, !tesi/ alanndaki !eleri siler# <tesi geri d!ner# ?? P"pe 6ve!torHH#ront( ) C ve!tor deki ilk !e e da an d!ndrr# 'n&ak ve!tor b) deilse, b% e ilevin k%llanm pr)gram&nn s)r%ml%l%%ndadr# ?? ####ve!torHHinsert( ) C $elli bir erden bala arak !eler erletirilebilir# =!n deeri arlan insert( ) e baldr# W? ve!torHHiterator insert(pos) C pos daki P"pe tipinin varsa lan deerini erletirir, pos d!ndrlr# W? ve!torHHiterator insert(pos, va %e) C pos daki deeri erletirir, pos d!ner# W? void insert(pos, i k, Ltesi) C 0ilk, !tesi/ inele i&i alanndaki !eleri erletirir# W? void insert(pos, n, va %e) C n tane, pos da va %e deerli !e erletirir# ?? void ve!torHHpop$&a!k( ) C $% e ve!tor deki s)n !e i kaldrr# $) ve!tor de herhangi bir e )lma"# ?? void ve!torHHp%sh$&a!k(va %e) C $% e ve!tor s)n%na va %e ekler# ?? void ve!torHHresize( ) C $% e ve!tor de ) anki !e sa sn deitirmek iin k%llanlr# W? resize(n, va %e) C ve!tor b) %t%n% n adete karmak iin k%llanlr# va %e bir seimdir, )lsa da )l%r )lmasa da# Ter ve!tor geniletilmi ve va %e )ksa, ) "aman ilave !elerin ilk deerleri* k%llanlan veri tipinin varsa lan deerleri )l%r# 'ksi d%r%mda ilave !eler va %e deeri ile balatlr# ?? ve!torHHreverse$iterator ve!torHHr&egin( ) C

$% e ve!tor deki s)n !e i iaret eden inele i&i i d!ndrr# ?? ve!torHHreverse$iterator ve!torHHrend( ) C $% e ve!tor deki ilk !eden !n&esini iaret eden inele i&i i d!ndrr# ?? %nsigned ve!torHHsize( ) C $% e ve!tor deki !e sa sn d!ndrr# ?? void ve!torHHs(ap( ) C $% e, a n veri tipte iki ve!tor n takas edilmesinde k%llanlabilir# <rnek* BB$@HCs_ap#&pp .in! %de -iostream* .in! %de -ve!tor* %sing namespa!e std / int main( )< ve!tor-int* v1(d) / ve!or-int* v1(17) / v1.s(ap(v1) / !o%t--v1.size( )--? =--v1.size( )--end / IBBBCJ BBretilen ktC BBD@ ` ) ist)

Aeri "ap3s3

ist kap sn+ liste veri aps )l%t%r%r# Liste veri aps k%llanlmadan !n&e pr)gram balklar arasnda m%tlaka aadaki !nerge b%l%nmaldr* .in! %de - ist* $ir ist aada ekil H#D de g!sterildii gibi d"enlenir# ist birbirleri ile g!stergeler ara&l ile balantl )lan a rk list !elerinden )l%%r# list iki d)r%lt%da geilebilir* Y]OA6 da s)ldan saa ani en sadaki AULL -@/?g!stergee varana kadar )lan ile, $'CK ten bala an sadan s)la srp en s)ldaki @?AULL g!stergee kadar giden geitir# 3em ve&t)r hem de list saklana&ak !e sa s tam bilinmedii "aman k%llanla&ak ver aplardr# $%n%n annda, iki veri apsndan birini ter&ih ederken % %lmas gereken ba" k%rallar b%l%n%r*

SSTriimlerin )% rastgele )ld%% "aman ve!tor ter&ih edilen veri aps )lmaldr# <rnek )larak bir metin apsnda k%llanlan karakter sklklarn saptarken ve!tor-int* #rekans(19:) / ip%&% )larak i i bir veri apsdr# 'lnan karakterlerin sa s +rekans ve&t)r ne di"in -indeZ/ deeri )larak k)n%r#

AULL -@/ Y]OA6

$'CK AULL -@/

(ekil H#D list veri aps


SS<n&eki !rnek ikin&i k%ral tari+ ettii gibi ve&t)r n ter&ih nedenini de belirtir# <e sa s !n&eden bilinirse -ve pr)gram sresin&e deime"se/ ve&t)r list e g!re her "aman ter&ih edilmelidir# SS <e erletirme ve silmelerinin a gn )ld%% d%r%mlarda genel )larak ist ter&ih edilmelidir# 'slnda benim te&rbelerime g!re ve!tor birtakm eksiklikler )lmasna ramen % g%lamalarda )k daha h"ldr# ist ve ve!tor arasnda ter&ih aparken g!"!nne alna&ak kstaslar hakknda bira" daha dnmek gerekmektedir# ve!tor n dinamik )larak b ebildii bir gerek )lmasna ramen, dinamik b me )k sa da veri k)p alama a )lamaktadr# 'ktr ki mil )nlar&a veri apsnn k)p alanmas, bilgisa arlar )k h"l )lsa bile epe "aman alr# <te andan )k sa da !enin ist e erletirilmeleri istenme en verilerin k)p alanmalarn gerektirme"# 9eni bir !enin ist e erletirilmesig!stergelerle ilgili &amba"lklar gerektirir# (ekil H#E de eni bir !enin eklenmesi g!rl )r# $%rada d!rt !eli eni bir ist

)l%t%rabilmek iin ikin&i ve n& !eler arasna eni bir !e erletirilmitir# 3erhangi bir !e i ist ten kaldrmakta )ld%ka basittir# (ekil H#F te !eli bir list ten ikin&i !e nasl karlr g!sterilmekte# 9ine b%rada da g!stergelerle &amba"lk apmak gerekmektedir# 'ma b% ilem eni bir !e ekleme e

$'CK AULL Y]OA6 eni veri AULL

(ekil H#E list e !e ekleme


g!re daha k)la dr# Sade&e iki g!sterge&in )l% deitirilir# ist ve ve!tor ler arasnda aplan karlatrma !"etle e&ek )l%rsak* herhalde varla&ak en i i s)n%, hangi veri apsnn seile&ei k)n%s%nda kesin ak bir antn )lmaddr# Sade&e g!"!nne alna&ak ba" k%rallarn )ld%%n% kab%l etmek en i isidir# Ter k!tnn k!ts ile karlamak istemi )rsan", daha i isini b%lmak iin bir ilem sresi !l&& -pr)+iler/ k%llanmak hepsinden i idir#

AULL $'CK Y]OA6


feki 9.5

AULL

+ list ten !e kartma r )

t
$i" ine de b% k)n%daki deiik dn&eleri dikkate almadan list te b%l%nan ap& ilevleri, ileleri ve e ilevleri anlatalm* WW 9ap& ilevlerC ?? $ir ist b) )larak ina edilebilir C ist-string* o&Qe!t / ve!tor lerde )ld%% gibi &o2 bir ist te !e s)rg%lamak hata a )laar# ??$ir ist belli sa da !e ile balatlabilir# Narsa alm ilk deer atamas ak )larak aplmam )ls%n, ) "aman k%llanlan veri tipinin varsa lan deeri ve a varsa lan ap& ilevi b% ii apar# <rnek* ist-string* o&Qe!t(17, string(=se am?)) / BBD@ selam la balatr ist-string* !ontainer(17) / BBD@ b) string le balar ?? $ir ist iki inele i&i k%llanlarak balatlabilir# $ir ist i ve!tor-string* in H# !esinden D@# !esine -s)n%n&% da dahil/ kadar balatabilmek iin aadaki ap k%llanlr* e'tern ve!tor-string* !ontainer / ist-string* o&Qe!t(6!ontainerC9D, 6!ontainerC11D) / ?? $ir ist k)p a ap& ilev k%llanarakta balatlabilir* e'tern ist-string* !ontainer / ist-string* o&Qe!t(!ontainer) / ?? Kap sn+larda k%llanlan standart ilelerin dnda, ist kap sn+na !"g baka ile b%l%nmamaktadr# WW 'adaki e ilevler ist ile birlikte k%llanlmaktadr* ?? P"pe 6 istHH&a!k( ) C $% e ilev ist teki s)n !enin da an&n d!ndrr# ist b) )lmadnda, b%n%n k%llanm tamamen pr)gram&nn s)r%ml%l%%ndadr#

?? istHHiterator istHH&egin( ) C $% e ilev ist in ilk !esini iaret eden inele i&i i d!ndrr, ist b) ise ) "aman istHHend( ) d!ner# ?? istHH! ear( ) C $% e ilev ist te b%l%nan btn !eleri siler# ?? &oo istHHempt"( ) C $% e ilev ist te hi !e b%l%nma"sa tr%e -d)r%/ d!ndrr# ?? istH.iterator istH.end( ) C $% e ilev ist te b%l%nan s)n !enin !tesini iaret eden inele i&i d!ndrr# ?? istHHiterator istHHerase( ) C $% e ilev ist te belli erlerdeki !eleri silmekte k%llanlabilir# W? erase(pos) C pos tara+ndan belirtilen n)ktadaki !e i siler# ++pos inele i&isi d!ner# W? erase(i k, Ltesi) C Ci k, Ltesi) inele i&isinin g!sterdii alandaki !eleri siler# Ltesi d!ndrlr# ?? P"pe 6 istHH#ront( ) C $% e ilev ist te b%l%nan ilk !e e da an d!ndrr# ist b) )lmad "aman, e ilevin k%llanm pr)gram&nn s)r%ml%l%%ndadr# ?? ### istHHinsert( ) C $% e ilev ist e !eler eklemek istendii "aman k%llanlr# =!n deeri arlan insert( ) ilevinin srmne baldrC W? istHHiterator insert(pos) C pos ta P"pe tipinde varsa lan deeri erletirir# pos d!ner# W? istHHiterator insert(pos, va %e) C pos ta val%e deerini erletirir, pos d!ner# W? void insert(pos, i k, Ltesi) C Ci k, Ltesi) inele i&i alanndaki !eleri erletirir# W? void insert(pos, n, va %e) C pos ta, va %e deerlerine sahip n tane !e i erletirir# ?? void ist-P"pe*HHmerge( ist-P"pe* other) C $% e ilev ) anki ve !br ist lerin sral d"ende )ld%%n% kab%l eder#

-aada b%l%nan sort( ) esine bakn"/# $% kab%le da al )larak other n !elerini ) anki ist e ! le erletirirki deitirilen eni ist hala sral d"ende kalr# Ter her iki ist sral deilse, s)n% ist her iki ist in balang d%r%m%ndaki sralama a mmkn )ld%%n&a en akn sralamada d"enlenir# ist-P"pe*HHmerge( ), ist teki verileri sralamak iin P"peHHoperator-( ) k%llandndan b% ile m%tlaka b%l%nmaldr# (imdiki !rnek merge- / e ilevinin k%llanmn g!stermektedir* list ,)bee&t, sral deildir, b% "den elde edilen s)n% list mmkn )lan en akn d"ende )l%r# BBC$@HCliste#&pp .in! %de -iostream* .in! %de -string* .in! %de - ist* %sing namespa!e std / void sho( ist( ist-string* 6hede#)< #or( ist-string*HHiterator #rom,hede#.&egin( )/ #rom+,hede#.end( )/ ++#rom) !o%t--0#rom--end / I int main( )< ist-string* i k / ist-string* ikin!i / i k.p%sh$&a!k(string(=a #a?)) / i k.p%sh$&a!k(string(=&ravo?)) / i k.p%sh$&a!k(string(=go #?)) / i k.p%sh$&a!k(string(=ankara?)) / ikin!i.p%sh$&a!k(string(=ahmet?)) / ikin!i.p%sh$&a!k(string(=&an%?)) / ikin!i.p%sh$&a!k(string(=a&d% ah?)) / ikin!i.p%sh$&a!k(string(=&o %?)) / i k.merge(ikin!i) / sho( ist(i k) / IJJJHK ist in kendisi veri )larak k%llanlrsa, merge( ) ist i deitirme"* o&Qe!t.merge(o&Qe!t), ,)bee&t, list ini deitirme"#

?? void istHHpop$&a!k( ) C $% e ilev ist teki s)n !e i kaldrr# 'ma ist b) ise herhangi bir e )lma"# ?? void istHHpop$#ront C $% e ilev ist teki ilk !e i kaldrr# ist b) ise herhangi bir e )lma"# ?? void istHHp%sh$&a!k(va %e) C $% e ilev ist s)n%na va %e ekler# ?? void istHHp%sh$#ront(va %e) C $% e ilev ist in ilk !esinden !n&e e va %e i ekler# ?? void istHHresize( ) C $% e ilev ist teki !e sa sn deitirmek iin k%llanlr# W? resize(n, va %e) C ; e ilevin b% k%llanm ist i n !eli hale getirir, va %e ise )lsa da )l%r )lmasa da, ani sade&e bir seenektir# ist geniletilip n sa s belirtilme"se, eklenen eni !eler de, veri tipinin varsa lan balatma deerleri k%llanlr# 'ksi taktirde eni !elerde balatma va %e ile )l%r# ?? istHHreverse$iterator istHHr&egin( ) C $% e ilev ist te eralan s)n !e i iaret eden inele i&i i d!ndrr# ?? void istHHremove(va %e) C $% e ilev ist teki btn val%e tekrarlarn siler# 'adaki !rnek pr)gram btn )se am) lar ist nesne sinden kaldrr# BBC$@HCtekrarSsil#&pp .in! %de -iostream* .in! %de -string* .in! %de - ist* %sing namespa!e std / int main( )< ist-string* nesne / nesne.p%sh$&a!k(string(?se am?)) / nesne.p%sh$&a!k(string(?a em er?)) / nesne.p%sh$&a!k(string(?se am?)) / nesne.p%sh$&a!k(string(=a em er?)) /

nesne.remove(string(=se am)) / (hi e(nesne.size( ))< !o%t--nesne.#ront( )--end / nesne.pop$#ront( ) / I IJJJHK BBkt C alemler alemler BB ?? istHHreverse$iterator istH.rend( ) H $% e ilev ist te er alan ilk !eden !n&esini iaret eden inele i&i i d!ndrr# ?? %nsigned istH.size( ) C $% e ilev ist teki !e sa sn d!ndrr# ?? void istHHreverse( ) C $% e ilev ist teki !e d"enini ters apar# &a!k( ) !esi #ront( ) )l%r, ve a tersi de d)r%d%r# ?? void istHHsort C $% e ilev ist i sra a di"er# K%llanm ile ilgili !rnek, %niT%e( ) e ilevin aadaki % g%lamasnda verilmitir# ist teki !eleri sra a di"mek iin ist-P"pe*HHsort( ), P"peHHoperator-( ) % k%llanr, b%rada ile m%tlaka temin edilmi )lmaldr# 44 void istHHsp i!e(pos, o&Qe!t) C $% e ilev o&Qe!t ieriklerini ) anki ist e aktarr# sp i!e( ) esi k%llanlrken o&Qe!t inele i&isinin pos n)ktasna erletirerek balanr# sp i!e( ) ardndan o&Qe!t b)t%r# <rnek * BBC$@HCaktar#&pp BBspli&e k%llanm .in! %de -iostream* .in! %de -string* .in! %de - ist* %sing namespa!e std /

int main( )< ist-string* o&Qe!t / o&Qe!t.p%sh$#ront(string(=se am?)) / o&Qe!t.p%sh$&a!k(string(=a em er?)) / ist-string* arg%ment(o&Qe!t) / o&Qe!t.sp i!e(++o&Qe!t.&egin( ), arg%ment) / !o%t--?nesne kapsar?--o&Qe!t.size( )--?e ements, =-?arg%ments kapsar, =--arg%ment.size( )-=e ements, =--end / (hi e(o&Qe!t.size( ))< !o%t--o&Qe!t.#ront( )--end / o&Qe!t.pop$#ront( ) / I IJJJHK $aka bir %s%l de b!lne&ek arg%ment in ilk !esini g!steren, arg%ment inele i&isi arg%ment i takip etmesidir# 9a da o&Qe!t e b!lnmesi la"m gelen, inele i&i alma alann g!steren C&egin, end) i tanmla an iki inele i&i* &egin ve end tara+ndan takip edilmesidir# ?? void istHHs(ap( ) C $% e ilev a n veri tiplerini k%llanan iki ist i takas eder# ?? void istHH%niT%e( ) C $% e ilev sra a k)nm% bir ist te an ana b%l%nan birbirinin a n !eleri ist ten kaldrr# ist-P"pe*HH%niT%e( ) e ilevi P"peHHoperator,,( ) ile&ini !"de -a n/ !eleri saptamada k%llanr# $% "den b% ile di"gede tanmlanm )lmaldr# $ir !rnek )larak a n kelimeleri ist ten kaldralm* BBC$@HC$en"eriSsil#&pp BBlist te %nig%e- / k%llanmn .in! %de -iostream* .in! %de -string* .in! %de - ist* %sing namespa!e std / JBmerge- / !rneine bakMM void sho( ist( ist-string* 6target) / void sho( ist( ist-string* 6target)<

#or( ist-string*HHiterator #rom,target.&egin( )/ #rom+,target.end( ) / ++#rom) !o%t--0#rom**? = / !o%t--end / I int main( )< string arra"CD,<=izmir i?, =dam a?, =&ravo?, =dam a?) / ist-string* target(arra", arra"+sizeo#(arra")Jsizeo#(string))/ !o%t--?i kin sahip o %nanH ?--end / sho( ist(target) / target.sort( ) / !o%t--?"eni ha H =--end / sho( ist(target) / target.%niT%e( ) / !o%t--?%niT%e( ) ten sonraH =--end / sho( ist(target) / IJJJHK BBretilen ktC ilkin sahip )l%nanC i"mirli damla brav) damla eni halC brav) damla damla i"mirli %nig%e den s)nraC brav) damla i"mirli BB ,T%e%e) Bap

s3n3#3

$% sn+ k% r%k denilen veri apsn )l%t%r%r# $ir pr)gramn iinde g%e%e sn+n k%llanabilmek iin !nilemle i&i e aadaki !nerge i vermek gerekir* .in! %de -T%e%e* 'adaki ekilde g!rld "ere T%e%e e bir n)ktadan -arka/ eni !eler eklenir - ani a"lr/ bir n)ktadan da -!n/ !eler kaldrlabilir - ani

)k%nabilir/# 9ani !n&e giren !n&e kar -ve a ilk giren ilk kar/#

arka
feki 9.8 ? h%e%e -k% r%k/

!n

T%e%e kap sn+ aadaki ile, e ilev ve ap& ilevleri k%llanmn salar* WW 9ap& ilevlerC ?? $ir T%e%e b) )larak ina edilebilir* T%e%e-string* o&Qe!t / ve!tor kap sn+nda )ld%% gibi, eer b) T%e%e nin !esi k%llanlma a kalklrsa hata )rta a kar# ?? $ir T%e%e k)p a ap& ilev k%llanlarak balatlabilir* e'tern T%e%e-string* !ontainer / T%e%e-string* o&Qe!t(!ontainer) / 00 T%e%e kab sade&e basit kap ilelerini destekler# WW T%e%e nin e ilevleri aada verilmitir* ?? P"pe 6T%e%eHH&a!k( ) H $% e ilev k% r%%n s)n !esine da an d!ndrr# Sade&e k% r%k b) deilse, k%llanma s)r%ml%l%% tamamen pr)gram&dadr# ?? &oo T%e%eH.empt"( ) H $% e ilev k% r%k b) ise tr%e - ani b))l D/ d!ndrr#

?? P"pe 6T%e%eHH#ront( ) C $% e ilev k% r%ktaki ilk !e e da an d!ndrr# Sade&e k% r%k b) deilse b% e ilevin k%llanm pr)gram&nn s)r%ml%l%%ndadr# ?? void T%e%eHHp%sh(va %e) C $% e ilev k% r%%n arkasna eni bir va %e !esi ekler# ?? void T%e%eHHpop( ) C $% e ilev k% r%%n !nnde er alan !e i kaldrr# $% e ilev !e i d!ndrme" belirtelim# $) bir k% r%kta herhangi bir e )lma"# ?? %nsigned T%e%eHHsize( ) C $% e ilev k% r%ktaki !e sa sn d!ndrr# $%rada ba" !"ellikleri n)t delim* T%e%e inele i&ileri ve di"in belirte&ini (CD) destekleme"# T%e%e nin sade&e ilk ve s)n !elerine eriilebilir# $ir k% r%k aadaki )llarla b)altlabilir* W? !nde er alan !eler sra ile kaldrlr# W? a n veri tipinde b) bir k% r%k kendisine atanarak# W? k& ilevi arlarak# )priorit"$T%e%e) Ba&3 $% kap !n&elikli k% r%k veri apsn )l%t%r%r# priorit"$T%e%e k%llanlmadan !n&e aadaki !nilemle i&i !nergesi m%tlaka a"lm )lmaldr* .in! %de -T%e%e* $ir priorit"$T%e%e, T%e%e nin a nsdr, sade&e +ark* veri !elerinin erletirilmelerine !n&elik k%rallarna g!re i"in vermesidir# <n&elikli k% r%klara gerek ha attta, hava alanlarna girerken denetlemelerde rastlanr# 7e kalan )l&%lara srada !ne geme i"ni verilir* b! le&e !teki )l&%lara g!re daha st !n&elie sahip )l%rlar# <n&elikli k% r%kta operator-( ) ile&i k%llanlr# $% ile !n&elikli k% r%kta saklanan veri !elerinin, !n&elik dere&elerini belirlemekte k%llanlr# =eeri daha kk )lan daha dk !n&eliklidir# $% "den

!n&elikli k% r%k, deerleri varma esnalarnda sra a di"er# 'adaki !rnek priorit"$T%e%e nin basit bir k%llanmdr# !in nesnesinden kelimeleri )k%r ve !o%t nesnesine kelimeleri di"ili bir liste )larak erletirir# BBC$@HCmakamSsahibi#&pp BBpri)rit Sg%e%e k%llanm .in! %de -iostream* .in! %de -string* .in! %de -T%e%e* %sing namespa!e std / int main( )< priorit"$T%e%e-string* s / string ke ime / (hi e(!in**ke ime) s.p%sh(ke ime) / (hi e(s.size( ))< !o%t--s.top( )--end / s.pop( ) / I IJJJHK Uaalese+ kelimeler ters d"ende sralanr* "ira !n&elikli k% r%kta !n&e g!rnen -4 ile&i 'SCOO di"isinde daha s)nra )rta a kar# $% s)r%n% !"mek iin string veri tipi etra+nda bir dren -_rapper/ sn+ tanmlanr, b! le&e operator-( ) ile&i istediimi" gibi tanmlanr# $! le&e 'SCOO de erken g!rnen k% r%kta da ilk g!rnr# 8te deitirilmi pr)gram* BBC$@HCd)gr%SmakamSsahibi#&pp BBdeiiklie %ram istediimi" s)n%&% veren pr)gram .in! %de -iostream* .in! %de -string* .in! %de -T%e%e* ! ass Metin< stdHHstring d$s/ p%& i!H Metin(stdHHstring !onst 6str) H d$s(str) <I operator stdHHstring !onst 6( ) !onst<

ret%rn d$s / I &oo operator-(Metin !onst 6right) !onst< ret%rn d$s*right.d$s / I I/ %sing namespa!e std / int main( )< priorit"$T%e%e-Metin* s / string ke ime / (hi e(!in**ke ime)< s.p%sh(ke ime) / I (hi e(s.size( ))< ke ime,s.top( ) / !o%t--ke ime-- end / s.pop( ) / I IJJJHK 9%kardaki !rnek pr)gramda dren -_rapper/ sn+ operator-( ) ile&ini string sn+nn kendisinden +arkl, isteimi"e % g%n tanmlar# priorit"$T%e%e de b%nlardan baka )laslklarda saklanabilir, !rnek ve!tor, !eleri ters d"ende )k%n%r# priorit"$T%e%e kabnn ileleri e ilevleri ve ap& ilevleri aada verilmitir* WW 9ap& ilevler C ?? $ir priorit"$T%e%e b) )larak ina edilebilir* priorit"$T%e%e-string* o&Qe!t / $) priorit"$T%e%e nin bir !esine eriilmek istenirse ve!tor de )ld%% gibi hata verir# ?? $ir !n&elikli k% r%k -priorit"$T%e%e/ k)p a ap& ilev k%llanlarak balatlabilir# e'tern priorit"$T%e%e-string* !ontainer / priorit"$T%e%e-string* o&Qe!t(!ontainer) /

WW priorit"$T%e%e kaplarn sade&e temel ilelerini destekler# WW 'adaki e ilevler priorit"$T%e%e e aittirler* ?? &oo priorit"$T%e%eHHempt"( ) C $% e ilev !n&elikli k% r%k b)sa tr%e d!ndrr# ?? void priorit"$T%e%eHHp%sh(va %e) C $% e ilev !n&elikli k% r%kta % g%n ere va %e i erletirir# ?? void priorit"$T%e%eHHpop( ) C $% e ilev !n&elikli k% r%%n en stnde b%l%nan !e i kaldrr# <e b% e ilev tara+ndan d!ndrlme"# <n&elikli k% r%k b)sa herhangi bir e )lma"# ?? %nsigned priorit"$T%e%eHHsize( ) C $% e ilev !n&elikli k% r%ktaki !e sa sn d!ndrr# ?? P"pe 6priorit"$T%e%eHHtop( ) C $% e ilev !n&elikli k% r%ktaki ilk !e e da an d!ndrr# 'n&ak eer !n&elikli k% r%k b) deilse b% e ilevin k%llanm s)r%ml%l%% pr)gram& a aittir# $%rada hemen belirtelim priorit"$T%e%e inele i&ileri ve a di"in ilelerini desteklememektedir# $ir !n&elikli k% r%% b)altmak iin* Wardarda en st !eler kaldrlr# Wa n veri tipi k%llanlarak b) bir !n&elikli k% r%k tamas aplr# W k& ilev arlr# )deT%e) Ba&3 =ek )larak tela++%" edilen deT%e i+t %l% k% r%k veri apsdr# deg%e kab k%llanlmadan !n&e m%tlaka aadaki !nilemle i&i !nergesi k%llanlmaldr* .in! %de -deT%e* deT%e, T%e%e ile karlatrlabilir# deT%e nin T%e%e den tek +ark* her iki

%tan da a"labilir ve )k%nabilir )lmasdr# 'slnda bir)k % g%lama bakmndan deT%e, T%e%e e g!re daha ileviktir# 'adaki in&elemeler srasnda g!re&eini" gibi, e ilevler b%n% aka g!stermektedir# $ir deT%e, iki T%e%e ile bir ve!tor kabndan )l%m%t%r# ve!tor %n her iki %&%nda ilem apabilir# <elerin rastgele erletirilmelerinde ve her iki %tan !elerin eklenmelerinde ve a kaldrlmalarnda ve!tor erine deT%e dnlmelidir# $% k)n%da birin&i &ildimi"de de a rntl bir in&eleme b%l%nmaktadr# deT%e nin ap& ilevleri, ileleri ve e ilevleri aada verilmitir* WW 9ap& ilevler C ?? $ir deT%e b) )larak ina edilebilir* deT%e-string* o&Qe!t / ve!tor de )ld%% gibi b) bir deT%e nin !esine da an alndnda hata rer# ?? $ir deT%e belli sa da !e ile balatlabilir# Narsa m )larak eer balatma deeri ak )larak be an edilmemise, varsa lan deer ve a asl veri tipi iin varsa lan ap& ilev k%llanlr# <rnek* deT%e-string* o&Qe!t(d, string(=se am?)) / BB` tane selam ile balar deT%e-string* !ontainer(1e) / BBDR tane b) string ?? $ir deT%e iki tane inele i&i k%llanlarak balatlabilir# $ir ve!tor-string* in H# !esinden D@# !esine -D@# !e de dahil/kadar )lan deerlerle deT%e i balatmak iin aadaki ap k%llanlr* e'tern ve!tor-string* !ontainer / deT%e-string* o&Qe!t(6!ontainerC9D, 6!ontainerC11D) / ?? $ir deT%e k)p a ap& ilev k%llanlarakta balatlabilir# e'tern deT%e-string* !ontainer / deT%e-string* o&Qe!t(!ontainer) / WW Kaplarda k%llanlan standart ilelerin dnda deT%e, di"in ile&ini de destekler# -0 1/ di"in ile&i deT%e e rastgele !e atanmasnda ve a )ndan

!e elde edilmesinde k%llanlr# 9aln" di"inde belirtilen !e erinde m%tlaka b%l%nmaldr# WW deT%e de aadaki e ilevler b%l%n%r* ?? P"pe 6deT%eHH&a!k( ) C $% e ilev deT%e deki s)n !e e da an d!ndrr# Sade&e eer deT%e b) deilse b% e ilevin k%llanm pr)gram&nn s)r%ml%l%%ndadr# ?? deT%eHHiterator deT%eHH&egin( ) C $% e ilev deT%e deki ilk !e i iaret eden inele i&i i d!ndrr# ?? void deT%eHH! ear( ) C $% e ilev deg%e deki btn !eleri siler# ?? &oo deT%eHHempt"( ) C $% e ilev deg%e de !e )lma"sa tr%e d!ndrr# ?? deT%eHHiterator deT%eHHend( ) C $% e ilev deT%e deki s)n !eden s)nrasn iaret eden inele i&i i d!ndrr# ?? deT%eHHiterator deT%eHHerase( ) C $% e ilev deT%e de belli bir b!lgede er alan !eleri silmede k%llanlabilir# erase(pos) C p)s %n iaret ettii erdeki !e silinir# ++ pos d!ner# erase(i k, &e"ond) C Ci k, &e"ond) inele i&i b!lgesindeki !eleri siler# Be"ond geri d!ner ?? P"pe 6deT%eHH#ront( ) C $% e ilev deT%e te er alan ilk !e e da an d!ndrr# Sade&e an&ak deg%e b) deilse b% e ilevin k%llanm pr)gram&nn s)r%ml%l%%ndadr# ?? ### deT%eHHinsert( ) C $% e ilev belli bir erden balamak "ere deT%e e !eler erletirmek iin k%llanlabilir# =!ndrlen deer insert( ) ilevine baldr C deT%eHHiterator insert(pos) C P"pe tipinin varsa lan deerini pos ta erletirir ve pos geri d!ner#

deT%eHHiterator insert(pos, va %e) C pos ta va %e i erletirir, pos d!ner# void insert(pos, i k, &e"ond) C $% e ilev Ci k, &e"ond) inele i&i b!lgesindeki !eleri erletirir# void insert(pos, n, va %e) C va %e deerine sahip n tane !e i pos tan bala arak erletirir# ?? void deT%eHHpop$&a!k( ) C $% e ilev deT%e deki s)n !e i kaldrr# deT%e b)sa herhangi bir e )lma"# ?? deT%eHHpop$#ront( ) C $% e ilev deT%e deki ilk !e i kaldrr# Ter deT%e b)sa bir e )lma"# ?? void deT%eHHp%sh$&a!k(va %e) C $% e ilev deT%e s)n%na bir va %e deerli !e i ekler# ?? void deT%eHHp%sh$#ront(va %e) C $% e ilev deT%e nin ilk !esinden !n&e va %e deerini erletirir# ?? void deT%eHHresize( ) C $% e ilev deT%e de ) anki sakl )lan !e sa sn deitirmek iin k%llanlabilir# resize(n, va %e) C deT%e b kln n deerine b) %tlandrr# Aa %e bir seenektir# Olsa da )l%r )lmasada# deT%e geniletilir ve va %e de belirtilme"se, eklenen !eler k%llanlan veri tipinin varsa lan deeri ile balatlr# 'ksi taktirde va %e ile balatlrlar# ?? deT%eHHreverse$iterator deT%eH.r&egin( ) C $% e ilev deT%e deki s)n !e i iaret eden inele i&i i d!ndrr# ?? deT%eHHreverse$iterator deT%eHHrend( ) C $% e ilev deT%e deki ilk !eden !n&esini iaret eden inele i&i i d!ndrr# ?? %nsigned deT%eHHsize( ) C $% e ilev deT%e deki !e sa sn d!ndrr#

?? void deT%eHHs(ap(arg%ment) C $% e ilev a n veri tipini k%llanan iki deT%e i takas etmekte k%llanlabilir# )map) Ba&3 map sn+ ilikili, sral di"i gerekletirir# $ir map herhangi bir kap sn+nn kab%l edebile&ei tipte, anahtar/deer i+tleri ile d)ld%r%l%r# 6ipler hem anahtar hem de deerle ilikili )ld%% iin, al a ra ierisinde her iki tipi de belirtmek ")r%nda "# 8lki anahtarn tipini, ikin&isi de deerin tipini g!sterir# <rnek )larak* anahtar string deeri ise do%& e tipinde )lan bir map aadaki gibi a"lrC map-string, do%& e* o&Qe!t/ 'nahtar kendisi ile ilikili )lan bilgi e erimekte k%llanlr# arlan bilgi e deer ad verilir# 6ele+)n +ihristini b%na !rnek )larak verebiliri"# 'nahtar )larak tandklarn isimleri, )nlarn tele+)n n%maralar ve a baka bilgileri -ii, adresi, p)sta k)dlar vs## / ise deer )larak k%llanlr# map sn+ anahtarlar sra a di"dii iin, anahtarn operator-( ) ile&i m%tlaka tanmlanmal ve k%llanlabilir )lmaldr# <rnek )larak* g!stergelerin anahtarlar iin k%llanlmas k!t bir dn&edir, "ira g!stergelerin sra a di"ilmesi )nlarn g!sterdii deerlerin sra a di"ilmesinden +arkl bir e dir# map sn+ ile aplan iki temel ilem* anahtarBdeer birlikteliklerinin saklanmas ve anahtarlar bildirilen deerlerin saptanmasdr# =i"in deeri )larak anahtar k%llanarak her ikisi iin di"in ile&i k%llanlabilir# =i"in ile&i s)l an )larak k%llanlrsa, deer erletirme gereklenir# Sa an )larak k%llanlrsa, anahtarn ilikili deeri elde edilir# 3er anahtar map te sade&e bir ke" b%l%nabilir# Ter a n anahtar bir ke" daha k%llanlrsa, eni deer !n&eki deerle erdeitirir, !n&eki deer ka b)l%r# $elli bir anahtarBdeer birliktelii map iine ak ve a gi"li erletirilebilir#'ka erleim ter&ih edilirse, !n&e anahtarBdeer birliktelii ina edilmelidir# $% amala her map bir va %e$t"pe , map te saklana&ak deerleri )l%t%rmada k%llanmak iin tanmlar# <rnek )larak map-string, int* bir deeri aadaki gibi ina eder*

map-string, int*HHva %e$t"pe seAa %e(=se am?, 1) / map-string, int*H ile ilikili )lan va %e$t"pe tr ve anahtarn tipi string tir, deerin tipi ise int tir# 'n)nim va %e$t"pe nesneler de k%llanlabilir <rnek* map-string, int*HHva %e$t"pe(=se am?, 1) / map-string, int*HHva %e$t"pe(... ) i+adesini tekrar tekrar a"maktansa b%n% basitletirmek ve k)la la latrmak iin t"pede# k%llanm daha % g%nd%r* t"pede# map-string, int*HHva %e$t"pe String;ntAa %e $% t"pede# k%llanarak map-string, int* iin deerler artk aadaki gibi ina edilir* String;ntAa %e(=se am?, 1) / S)n )larak, map tara+ndan k%llanlan anahtarBdeer birliktelikleri pair tara+ndan da g!sterilebilir* pair-string, int*(=se am?, 1) / map kap sn+nda b%l%nan ap& ilevler, ileler ve e ilevler aada verilmitir* WW 9ap& ilevler C ?? $ir map b) )larak ina edilebilir* map-string, int* o&Qe!t / JJ)bee&t nesne demek hatrlatalm $%rada bir e i daha hatrlatalm* map lerde saklanan deerlerin kendileri de kap )labilir# 'adaki !rnek deeri pair )lan bir map tanmlar* b%rada bir kap baka bir kabn iinde %valanmtr* map-string, pair-string, string* * o&Qe!t / $%rada eri gelmiken hemen bir k)n% % da bildirelim* kapatan al a ralar arasnda her "aman bir b)l%k brakn - ani 5 5 apn/# $% bir ")r%nl%l%kt%r# :ira eer b)l%k braklma"sa - ani 55 aplrsa/, derle i&i

tara+ndan saa ka drma )larak alglanr# 6abii b% b%rada bi"im istemediimi" bir ilemdir# ?? $ir map iki inele i&i k%llanlarak balatlabilir# 9inele i&iler a map in va %e$t"pe deerlerini iaret ederler a da basit pair nesnelerini# pair ler k%llanlrsa, ilk !eler anahtarlar ikin&i !elerde deerleri temsil ederler# <rnek* pair-string, int* paCD ,< pair-string, int*(=&ir?, 1), pair-string, int*(=iki?, 1), pair-string, int*(=%!?, 5), I/ map-string, int* o&Qe!t(6paC7D, 6paC5D) / 9%kardaki !rnekte pair-string, int* erine map-string, int*HHt"pe$va %e te a"labilir de# &egin ilk inele i&i end de ikin&i inele i&i )ld%%nda, C&egin, end) map i balatmakta k%llanlr# Se"gilerin "ttna belki map ap& ilevi sade&e ne( anahtarlarn girer# pa nn s)n !esi Xbir[ F )lsa d, sade&e iki !e map e girebilirdi C Xbir[ D, Xiki[ E # Xbir[ F iin deerlendirme sessi"&e g!"ard edilirdi# map, inele i&ilerin iaret ettii verilerin kendi k)p alarn alr# $%n% anlamak iin aadaki !rnee bakabilirsini"* BBC$@HCmapS)rnek#&pp BB inele i&ilerin iaret ettikleri .in! %de -iostream* .in! %de -map* %sing namespa!e std / ! ass M"C ass< p%& i!H M"C ass( )< !o%t--?M"C ass "api!i is eviEn? / I M"C ass(!onst M"C ass 6other)< !o%t--?M"C ass kop"a "api!i is eviEn? / I KM"C ass( )< !o%t--?M"C ass "iki!i is eviEn? / I

I/ int main( )< pair-string, M"C ass* pairsCD ,< pair-string, M"C ass*(=&ir?, M"C ass( )), I/ !o%t--?!i#t er insa edi diEn? / map-string, M"C ass* mapsm(6pairsC7D, 6pairsC1D) / !o%t--?mapsm insa edi di En? / IJJJHK BBretilen ktC U Class api&i islevi U Class k)p a api&i islevi U Class iki&i islevi &i+tler insa edildi U Class k)p a api&i islevi U Class k)p a api&i islevi U Class iki&i islevi mapsm insa edildi U Class iki&i islevi BB $% pr)gramn ktsn i"leme e aldm" "aman, ilk !n&e M"C ass nesnesinin ap& ilevi, pairs di"isinin an)nim !elerini balatmak iin k%llanld g!rlr# $% nesne k)p a ap& ilev tara+ndan pairs di"isinin ilk !esine k)p alanr# =aha s)nra artk esas !e e gerek d% %lma", ve silinir# pairs di"isinin ina edildii n)kta b%rasdr# 'rtk map, map !esini ina etmek iin gei&i pair nesnesini ina eder# map !esi ina edildiinde gei&i pair nesneleri silinir# Aeti&ede, pr)gram s)nland "aman map teki pair !esi de silinir# ?? $ir map, k)p a ap& ilev k%llanarakta balatlabilir* e'tern map-string, int* !ontainer / map-string, int* o&Qe!t(!ontainer) / ?? Kaplar iin k%llanlan standart ilelerden baka, map kap sn+ di"in ile&ini de destekler# $! le&e map in tek tek !eleri !renilebilir ve a eniden atanabilir# $%rada di"in ile&inin atanan verisi bir anahtardr# 'tanan veri ani anahtar map te b%l%nma"sa, eni bir veri !esi )t)matik

)larak map e eklenir ve eni !enin deer ksmn balatmak iin, a varsa lan deer a da varsa lan ap& ilev k%llanlr# =i"in ile&i sa an )larak k%llanlmsa, b% varsa lan deer d!ndrlr# map in eni bir !esi ve a baka bir !enin eniden atamas apld "aman, atama ile&inin sa an tipi map in deer ksmnn tipi ile m%tlaka a n )lmaldr# $% bir ")r%nl%l%kt%r# <rnek* map te Xiki[ !esinin deerini deitirmek ve a enisini eklemek iin aadaki de im k%llanlr* mapsmC=iki?D,M"C ass( ) / WW map kap sn+nda aadaki e ilevler b%l%rC ?? mapHHiterator mapHH&egin( ) H $% e ilev map in ilk !esini iaret eden inele i&i i d!ndrr# ?? mapHH! ear( ) H $% e ilev map !elerinin tmn siler# ?? %nsigned mapHH!o%nt(ke") H $% e ilev eldeki anahtar map te b%l%n% )rsa D d!ndrr# 'ksi taktirde @ d!ner# ?? &oo mapHHempt"( ) H $% e ilev map te hi e )lma"sa tr%e d!ndrr# ?? mapHHiterator mapHHend( ) H $% e ilev, map teki s)n !eden !tesini g!steren inele i&i i d!ndrr# ?? pair-mapHHiterator mapHHiterator* mapHHeT%a $range(ke") H $% e ilev, o(er$&o%nd( ) ve %pper$&o%nd( ) e ilevlerinin d!n deerlerine bal )larak, bir i+t inele i&i d!ndrr# $%n%n !rnei %pper$&o%nd( ) e ilevi in&elenirken verildi# ?? #### mapHHerase( ) H $% e ilev map ten belli bir tane ve a belli bir gr%p !e i silmek iin silmek iin k%llanlabilir* &oo erase(ke")H map ten, anahtar verilen !e i siler# =eer kaldrlmsa tr%e d!ner, )k eer anahtar verilen !e b%l%nm% )rsa ) "aman #a se d!ner#

void erase(pos)C pos inele i&isi tara+ndan iaret edilen !e i siler# void erase(#irst, &e"ond) C C#irst, &e"ond) inele i&i b!lgesinde er alan !eleri siler# ?? mapHHiterator mapHH#ind(ke") C $% e ilev anahtar verilen !enin inele i&isini d!ndrr# Ter !e b%l%nm% )rsa ) "aman end( ) d!ner# 'aadaki !rnek #ind( ) e ilevinin k%llanmn g!stermektedir* BBC$@HCb%l#&pp BB+ind- / ilev k%llanm !rnei .in! %de -iostream* .in! %de -map* %sing namespa!e std / int main( )< map-string, int* o&Qe!t / o&Qe!tC=&ir?D,1 / map-string, int*HHiterator it,o&Qe!t.#ind(=&ir?) / !o%t--? )&ir) =--(it,,o&Qe!t.end( ) X =not? H = ?)--?&% %nd%En? / it,o&Qe!t.#ind(=%!?) / !o%t--? )%!) =--(it,,o&Qe!t.end( ) X =not? H = =)--?&% %nd%En? / IJJJHK BBretilen ktC ,bir, b%l%nd% ,%&, n)t b%l%nd% BB ?? ### mapHHinsert( ) C $% e ilev map e !e erletirmekte k%llanlr# $%n%nla birlikte var)lan anahtarlarla ilikili )lan deerler, enileri ile er deitirme"# =!n deeri arlan insert( ) n eidine baldr* pair-mapHHiterator, &oo * insert(ke"va %e) 9eni bir mapHHva %e$t"pe map e erletirilir# =!n deeri ise pair-mapHHiterator, &oo * )l%r# Ke val%e de belirtilen anahtar eer !n&eden map te varsa, ) "aman +alse d!ner, b%ndan d)la ke val%e map e erletirilme"# 3er iki d%r%mda da ke val%e de bildirilmi )lan anahtarn veri !esi mapHHiterator alann&a iaret edilir# insert( ) n b% eidinin

k%llanm !rnei aada verilmitir* BBC$@HC erles#&pp BBinsert- / k%llanm .in! %de -iostream* .in! %de -map* .in! %de -string* %sing namespa!e std / int main( )< pair-string, int* paCD ,< pair-string, int*(=&ir?, 17), pair-string, int*(=iki?, 17), pair-string, int*(=%!?, 57), I/ map-string, int* o&Qe!t(6paC7D, 6paC5D) / JBid)rt, G@I ve ,tr%e, d!ner pair-map-string, int*HHiterator, &oo * ret,o&Qe!t.insert(map-string, int*HHva %e$t"pe (=dort?, 87))/ !o%t--&oo a pha / !o%t--ret.#irst4*#irst--? =--ret.#irst4*se!ond--? =--ret.se!ond--? =-o&Qe!tC=dort?D--end / JBid)rt, G@I ve +alse d!ner ret,o&Qe!t.insert(map-string, int*HHva %e$t"pe (=dort?, 7))/ !o%t--ret.#irst4*#irst--? =-ret.#irst4*se!ond--? =-ret.se!ond--? =--o&Qe!tC=dort?D--end / IJJJHK BBretilen ktC d)rt G@ tr%e G@ d)rt G@ +alse G@ BB 'adakine ben"er kendine !"g aplara dikkat edilmelidir* !o%t--ret.#irst4*#irst--? =--ret.#irst4*se!ond--... .. ret, insert( ) e ilevin&e d!ndrlen pair e !"detir# #irst alan map-string, int* e bir inele i&idir, ani map-string, int*HHva %e$t"pe e g!sterge )larak kab%l edilebilir# $% deer tiplerinin kendileri pair dir# Ne

b%nlar )#irst) ile )se!ond) alanlarna aittirler# S)n% )larak* ,ret.#irst4*#irst, bir map deerinin -string/ anahtardr, ve ,ret.#irst4*se!ond, ise deerdir -int/# mapHHiterator insert(pos, ke"va %e) C $% )lla bir mapHHva %e$t"pe, pos g!"ard edilerek map e erletirilir, eklenen !enin inele i&isi d!ner# void insert(#irst, &e"ond) C $% e ilev C#irst, &e"ond) alanndaki inele i&ilerin g!sterdii erlere mapHHva %e$t"pe !eleri erletirir# ?? mapHHiterator mapHH o(er$&o%nd(ke") C $% e ilev en a"ndan !n&eden belirlenmi anahtara eit )lan ke in ilk anahtar deerini iaret eden inele i&i i d!ndrr# $! le bir !e )ksa ) "aman mapHHend( ) d!ner# ?? mapHHreverse$iterator mapHHr&egin( ) C $% e ilev map teki s)n !e i iaret eden inele i&i i d!ndrr# ?? mapH.reverse$iterator mapH.rend( ) C $% e ilev map teki ilk !eden !n&esini iaret eden inele i&i i d!ndrr# ?? %nsigned mapHHsize( ) C $% e ilev map teki !e sa sn d!ndrr# ?? void mapHHs(ap(arg%mant) C $% e ilev !"de anahtarBdeer tiplerine sahip iki map i birbiri ile takas eder# ?? mapHHiterator mapHH%pper$&o%nd(ke") C $% e ilev !n&eden belirlenmi ke deerini aan ilk ke" e ait )lan anahtar deer -ke val%e/ !esini g!steren inele i&i i d!ndrr# $! le bir !e )ksa ) "aman mapH.end( ) d!ner# 'ada verdiimi" !rnekte eT%a $range( ), o(er$&o%nd( ) ve %pper$&o%nd( ) e ilevleri k%llanlmtrC BB$@HCmapS% e#&pp

BBeg%alSrange, l)_erSb)%nd, %pperSb)%nd .in! %de -iostream* .in! %de -map* %sing namespa!e std / int main( )< pair-string, int* paCD,< pair-string, int*(=&ir?, 17), pair-string, int*(=iki?, 17), pair-string, int*(=%!?, 57), I/ map-string, int* o&Qe!t(6paC7D, 6paC5D) / map-string, int*HHiterator it / i#((it,o&Qe!t. o(er$&o%nd(=ik?)) +,o&Qe!t.end( )) !o%t--? o(er$&o%nd )ik) var oH ?-- it4*#irst--end / i#(o&Qe!t. o(er$&o%nd(=ikii?) ,, o&Qe!t.end( )) !o%t--? o(er$&o%nd )ikii) "ok?--end / !o%t--? o(er$&o%nd iki H =--o&Qe!t. o(er$&o%nd(=iki?)4*#irst-=varEn? / i#((it,o&Qe!t.%pper$&o%nd(=ik?)) +, o&Qe!t.end( )) !o%t--?%pper$&o%nd )ik) var oH =--it4*#irst--end / i#(o&Qe!t.%pper$&o%nd(=ikii?) ,, o&Qe!t.end( )) !o%t--?%pper$&o%nd )ikii) "ok--end / i#(o&Qe!t.%pper$&o%nd(=iki?) ,, o&Qe!t.end( )) !o%t--?%pper$&o%nd )iki) "ok =--end / pair-map-string, int*HHiterator, map-string, int*HHiterator* p,o&Qe!t.eT%a $range(=iki?) / !o%t--?eT%a $range H )#irst) gLsterirH =--p.#irst4*#irst--?, )se!ond) =-(p.se!ond ,, o&Qe!t.end( ) X ="ok? H p.se!ond4*#irst)--end / IJJJHK BBretilen ktC l)_erSb)%nd ,ik, var )Ciki l)_erSb)%nd ,ikii, )k l)_erSb)%nd ikiC var %pperSb)%nd ,ik, var )C iki %pperSb)%nd ,ikii, )k %pperSb)%nd ,iki, )k eg%alSrange C ,+irst, g!sterirC iki, ,se&)nd, )k BB

$% b!lmn ilk ksmnda belirtildii gibi map bir sral, ilikili di"i i temsil eder# map iinde anahtarlar -ke / sra a di"ilir# $ir % g%lama map te b%l%nan btn !eleri - a sade&e anahtarlar a da deerleri/ "i aret etmek ")r%nda kalrsa, &egin( ) ve end( ) inele i&ilerini k%llanmak me&b%ri etindedir# 'adaki !rnek, bir map teki btn anahtar ve deerleri listele en basit bir tabl) )l%%m%n% g!stermektedir* BBC$@HCtabl)#&pp BBbasit tabl)lama .in! %de -iostream* .in! %de -iomanip* .in! %de -map* %sing namespa!e std / int main( )< pair-string, int* paCD ,< pair-string, int*(=one?, 17), pair-string, int*(=t(o?, 17), pair-string, int*(=three?, 57), I/ map-string, int* o&Qe!t(6paC7D, 6paC5D) / #or(map-string, int*HHiterator it,o&Qe!t.&egin( )/ it+,o&Qe!t.end( )/ ++it) !o%t--set((9)--it4*#irst.!$str( )--set((9)--it4*se!ond--end / IJJJHK BBretilen ktC )ne D@ t_) E@ three F@ BB

)m% timap) Bap S3n3#3


m% timap sn+ a n map sn+ gibi -sral/ ilikili di"i )l%t%r%r# m%ltimap kaplar k%llanlmadan !n&e pr)gramda aadaki !nilemle i&i !nergesi m%tlaka belirtilmelidir# .in! %de -map5

map ile m% timap arasndaki temel +ark* m% timap a n anahtarla ilikili birden +a"la deeri destekler# map ise sade&e tek deerli anahtarlar destekler# $ir e i daha ekle elim* m% timap a r&a a n anahtarla ilikili )k sa da a n deeri de kab%l eder# m% timap, operator CD( ) di"in ile&i hari&indeki btn map e ilevlerini destekler# Aedenini k)la lkla anla abilirsini"# ' n anahtara )k sa da deer giriine i"in verilirse, si"&e o&Qe!tCke"D iin hangi deerler d!ndrlrQ#-M/## $ir !n&eki map e ilevlerine istinaden m%ltimap kap sn+ iin b%nlardan ba"larna daha +a"la dikkat g!stererek anlata&a"# ; e ilevlerC ?? %nsigned mapHH!o%nt(ke") C $% e ilev verilen anahtarla -ke / ilikili m%ltimap e girenlerin sa sn geri d!ndrr# ?? ### m% timapHHerase( ) C $% e ilev map ten !eleri silmekte k%llanlr# %nsigned erase(ke") C Nerilen anahtara sahip btn !eleri siler# Silinen !e sa s d!ner# void erase(pos) C p)s %n g!sterdii tek !e i siler# ' n anahtara sahip )labilen baka !eler silinme"# void erase(#irst, &e"ond) C C#irst, &e"ond) inele i&i alannn g!sterdii btn !eleri siler# ?? pair-m% timapHHiterator, m% timapHHiterator* m% timapHHeT%a $range(ke") C $% e ilev m% timapHH o(er$&o%nd( ) ile m% timapHH%pper$&o%nd( ) n d!n deerlerine bal )lan bir i+t inele i&i d!ndrr# 8lev m% timap te a n anahtarlara sahip btn !eleri belirlemede k%llanlan basit bir ara salar# $% e ilevlerin k%llanmn g!steren !rnek, b!lmn s)n%nda verildi# ?? m% timapHHiterator m% timapHH#ind(ke") C

$% e ilev anahtar ke" )lan ilk deeri iaret eden inele i&i i d!ndrr# Ter !e )ksa, ) "aman m% timapHHend( ) d!ner# 9inele i&i bir artrlarak a n ke e sahip btn !eleri "i aret eder# $% ilem a m% timapHHend( ) a da inele i&inin #irst esi baka ke" )lma ana kadar devam eder# ?? m% timapHHiterator m% timapHHinsert( ) C $% e ilev n)rmal biimde % g%lanr, map kab ile d!nen pair-m% timapHHiterator, &oo * erine m% timapHHiterator d!ndrr# =!nen inele i&i eklenen eni !e i iaret eder# o(er$&o%nd( ) ve %pper$&o%nd( ) ilevleri map ve m% timap kaplarnda a n davran g!stermelerine ramen, m% timap teki ilemleri daha +a"la ilgi i hak eder# 'adaki !rnek b% ilevlerin m% timap teki k%llanmlarn g!stermektedir* BBC$@HC&)kmapC&pp BBm%ltimap teki ilev k%llanmlarn .in! %de -iostream* .in! %de -map* %sing namespa!e std / int main( )< pair-string, int* paCD,< pair-string, int*(=a pha?, 1), pair-string, int*(=&ravo?, 1), pair-string, int*(=!har e"?, 5), pair-string, int*(=&ravo?, :), JJd"ensi" ,brav), deerleri pair-string, int*(=de ta?, 9), pair-string, int*(=&ravo?, 8), I/ m% timap-string, int* o&Qe!t(6paC7D, 6paC:D) / t"pede# m% timap-string, int*HHiterator msi;terator/ msi;terator it,o&Qe!t. o(er$&o%nd(=&rava?) / !o%t--? )&rava) iOin o(er$&o%ndH =--it4*#irst--?, =-it4*se!ond--end / it,o&Qe!t.%pper$&o%nd(=&rav%?) / !o%t--? )&rav%) iOin %pper$&o%ndH =--it4*#irst--?, =-it4*se!ond--end / pair-msi;terator, msi;terator* it>air,o&Qe!t.eT%a $range(=&ravo?) /

!o%t--? )&ravo) iOin eT%a $rangeH En?/ #or(it,it>air.#irst/ it+,it>air.se!ond/ ++it) !o%t--it4*#irst--?, =--it4*se!ond--end / !o%t--?%pper$&o%ndH =--it4*#irst--?, =--it4*se!ond--end / !o%t--? )&rav) iOin eT%a $rangeH En?/ it>air,o&Qe!t.eT%a $range(=&rav?) / #or(it,it>air.#irst/ it+,it>air.se!ond/ ++it) !o%t--?it4*#irst--?, =--it4*se!ond--end / !o%t--?%pper$&o%ndH =--it4*#irst--?, =--it4*se!ond--end / IJJJHK BBretilen ktC ,brava, iin l)_erSb)%ndC brav), E ,brav%, iin %pperSb)%ndC &harle , F ,brav), iin eg%alSrange brav), E brav), > brav), G %pperSb)%ndC &harle , F ,brav, iin eg%alSrangeC %pperSb)%ndC brav), E BB 'adaki !"elliklere her "aman dikkat edilmelidir* WW Olma an anahtarlar iin %pper$&o%nd( ) ve o(er$&o%nd( ) a n s)n%lar retirler* her ikisi de verilen anahtardan daha b k bir anahtarn ilk !esini d!ndrr# WW 3er ne kadar m% timap te anahtarlar d"enlenmi )lsalarda, a n -.!"de/ anahtarlarn deerleri d"enli deillerdir* ve b%nlar girildii d"ende geri e alnrlar#

)set) Ba&3
set sn+ deerlerin sral )larak t)planmasn salar# set kaplar k%llanlmadan !n&e pr)gramn banda aadaki !nilemle i&i !nergesi k%llanlmaldr*

.in! %de -set* )set) kab herhangi bir kap sn+ tara+ndan saklanabilen tipteki deerlerle d)ld%r%l%r# 3er deer set te sade&e bir ke" b%l%nabilir# set e erletirile&ek belli bir deer net )larak )l%t%r%l%r* her set, kendinde saklanabile&ek )lan deerleri )l%t%rmak iin bir va %e$t"pe tanmlar# <rnek )larak set-string* iin bir deer aadaki gibi )l%t%r%rl%r* set-string*HHva %e$t"pe setAa %e(=se am?) / va %$t"pe, set-string* ile ilikilidir# set-string*HHva %e$t"pe satrn tekrar tekrar a"mak erine hem a"m ksaltmak hem de )k%nabilirlilii arttrmak iin t"pede# k%llanlr* t"pede# set-string*HHva %e$t"pe StringSetAa %e $% t"pede# k%llanld "aman, set-string* iin deerler aadaki gibi )l%t%r%l%r* StringSetAa %e(=se am?) / $aka bir seenek )larakta, set tipinin deerleri hemen k%llanlabilir# $% d%r%mda P"pe tipinin deeri set-P"pe*HHva %e$t"pe a +arkettirilmeden evrilir# 'adaki ap& ilevler, ileler ve e ilevler set kabnda b%l%n%rlar* WW 9ap& ilevlerC ?? $ir set b) )larak ina edilebilir C set-int* o&Qe!t / ?? $ir set iki inele i&i k%llanlarak balatlabilir C int intarraCD ,<1, 1, 5, 8, 9, :I / set-int* o&Qe!t(6intarrC7D, 6intarrC:D) / $%rada dikkat edile&ek n)kta* set te er alan btn !elerin birbirinden

+arkl )lma ")r%nl%l%%d%r# 9ani set ina edilirken a n deer de+alar&a dep) edileme"# Sade&e deer ilk girildii anda dep)lanr, daha s)nra tekrar girilirse aktrmadan g!"ard edilir# ' n map te )ld%% gibi set ierdii verinin kendine ait k)p asn alr# ?? set k)p a ap& ilev k%llanlarak balatlabilir# e'tern set-string* !ontainer / set-string* o&Qe!t(!ontainer) / ?? set kab kaplar iin geerli btn standart ileleri destekler# WW set kabnn e ilevleri C ?? setHHiterator setHH&egin( ) C $% e ilev set in ilk !esini iaret eden inele i&i i d!ndrr# Ter set b) ise ) "aman setHHend( ) d!ner# ?? setHH! ear( ) C $% e ilev set te er alan btn !eleri siler# ?? %nsigned setHH!o%nt(ke") C $% e ilev verilen anahtar set te er al )rsa ) "aman D d!ndrr, aksi taktirde @ d!ner# ?? &oo setHHempt"( ) C $% e ilev set te !e )ksa, tr%e d!ndrr# ?? setHHiterator setHHend( ) C $% e ilev set in s)n !esinden !te i iaret eden inele i&i i d!ndrr# ?? pair-setHHiterator setHHiterator* setH.eT%a $range(ke") C $% e ilev o(er$&o%nd( ) ve %pper$&o%nd( ) e ilevlerine bal )lan bir i+t inele i&i d!ndrr# 'ada a rntlar aklana&ak# ?? ### setHHerase( ) C $% e ilev set ten belli bir !e i ve a bir b!lm !e i silmek iin k%llanlr# &oo erase(va %e) C

=eeri ,val%e, )larak belirtilen !e i set ten siler# ,val%e, silinirse, tr%e d!ner, aksi taktirde ani belirtilen ,val%e, )ksa +alse d!ner# void erase(pos) C p)s inele i&isinin iaret ettii !e i siler# void erase(#irst, &e"ond) C 0+irst, be )nd/ inele i&i aralndaki btn !eleri siler# ?? setH.iterator setHH#ind(va %e) C $% e ilev verilen deere sahip !enin inele i&isini d!ndrr# Ter !e )ksa end( ) d!ner# ?? ### setHHinsert( ) C $% e ilev set e !eler erletirmek iin k%llanlr# Ter !e !n&eden set te b%l%n% )rsa, var)lan !e d)k%n%lmadan braklr ve erletirile&ek !e g!"ard edilir# =!n deeri arlan insert( ) ilevinin eidine baldr# pair-setHHiterator, &oo * insert(ke"va %e) C 9eni bir setHHva %e$t"pe set e erletirir# pair-setHHiterator, &oo * ise d!n deeridir# =!nen b))l alan tr%e g!sterirse, istenen deer set e erlemi demektir# Ter d!nen b))l alan +alse g!sterirse, ) "aman verilen deer daha !n&eden set te b%l%n% )r demektir# $% "den anlan eni deer set e erletirilme"# 3er iki d%r%mda da setHHiterator alan set te belirtilen deere sahip veri !esini iaret eder# setHHiterator insert(pos, ke"va %e) C $% )lla bir setHHva %e$t"pe set e erletirilir# pos g!"ard edilir# 9erleen !enin inele i&isi d!ner# void insert(#irst, &e"ond) C 0+irst, be )nd/ inele i&i alann&a iaret edilen setHHva %e$t"pe !elerini set e erletirir# ?? setHHiterator setHH o(er$&o%nd(ke") C $% e ilev en a"ndan belirtilen ke e eit anahtarn ilk anahtar deer !esini iaret eden inele i&i i d!ndrr# $! le bir !e b%l%nm% )rsa ) "aman setHHend( ) d!ner# ?? setHHreverse$iterator setHHr&egin( ) C $% e ilev set in s)n !esini iaret eden inele i&i i d!ndrr# ?? setHHreverse$iterator setHHrend( ) C

$% e ilev set in ilk !esinden !n&esini iaret eden inele i&i i d!ner# ?? %nsigned setHHsize( ) C $% e ilev set teki !e sa sn d!ner# ?? void setHHs(ap(arg%ment) C $% e ilev a n tiplerdeki iki set i -set lerden !teki arg%ment tir/ takas eder# ?? setHHiterator setHH%pper$&o%nd(ke") C $% e ilev belirtilen ke i aan anahtara sahip, ilk anahtar deer !esini iaret eden inele i&i i d!ndrr# $! le bir !e )ksa, ) "aman setCCend- / d!ner#

)m% tiset) Bap s3n3#3


m%ltiset kab da a n set sn+nda )ld%% gibi sral deerler t)pl%l%% )l%t%r%r# m%tiset kab k%llanlmadan !n&e pr)gramda aadaki !nilemle i&i !nergesi m%tlaka a"lmaldr* .in! %de -set* set ile m% tiset arasndaki temel +ark* m%ltiset a n deerin birden +a"la giriine i"in verir# set ise a n deer iin sade&e tek girie i"in verir# set ile m% tiset a n e ilevler kmesini k%llanrlar# $% "den bir !n&eki b!lmde in&elenen set e ilevleri a nen m% tiset iin de geerlidir# $%n%nla beraber ba" e ilevler m% tiset te k%llanlrken daha +a"la dikkat gerektirir# 8te b% e ilevler aada a rntlar ile verilmitir* ?? %nsigned setHH!o%nt(va %e) C $% e ilev verilen deerin -val%e/ m% tiset e ka ke" girildiini g!steren sa d!ndrr# ?? ### m% tisetHHerase( ) C $% e ilev set ten !eleri silmekte k%llanlr*

%nsigned erase(va %e) C Nerilen deere -val%e/ sahip btn !eleri siler# Silinen !e sa s d!ner# void erase(pos) C p)s inele i&isi tara+ndan iaret edilen !e i siler# ' n deere sahip !teki !eler silinme"# void erase(#irst, &e"ond) C C#irst, &e"ond) inele i&i alann&a iaret edilen btn !eleri siler# ?? pair-m% tisetHHiterator m% tisetHHiterator* m% tisetHHeT%a $range (va %e) C $% e ilev m% tisetHH o(er$&o%nd( ) ile m% tisetHH%pper$&o%nd( ) e ilevlerine bal )lan bir i+t inele i&i d!ndrr# 8lev, m% tiset te a n deere sahip btn !eleri belirlemede basit bir %s%l salar# ?? m% tisetHHiterator m% tisetHH#ind(va %e) C $% e ilev belli bir deere sahip ilk !e i iaret eden inele i&i i d!ndrr# Ter ilgili !e )ksa ) "aman m% tisetHHend( ) d!ner# 9inele i&i belirlenen deere sahip btn !eleri saptamak iin, deerini her se+erinde bir arttrarak, a m% tisetH.end( ) a da artk a n deer rastlama ana kadar m%ltiset iinde ge"inir# ?? ### m% tisetHHinsert( ) C $% e ilev n)rmal )larak ilemlenir ve set kabnda d!nen pair-m% tisetHHiterator, &oo * deil, m% tisetHHiterator d!ndrr# =!nen inele i&i eni eklenen !e i iaret eder# o(er$&o%nd( ) ve %pper$&o%nd( ) e ilevleri hem set hem de m%ltiset te a n ekilde davranmalarna ramen, m%ltiset teki ilemi !"el dikkat gerektirir# <"ellikle belirtmemi" gereken* m%ltiset kab ile, )lma an anahtarlar iin hem o(er$&o%nd( ) hem de %pper$&o%nd( ) her ikisi de, a n s)n%&% retir, her ikisi de verilen anahtar aan anahtara sahip ilk !e i d!ndrr# (imdi m% tiset ile birlikte k%llanlan bir)k e ilevi barndran bir !rnek verelim* BBC$@HCm%ltst#&pp BB% e k%llanmlar .in! %de -iostream*

.in! %de -set* %sing namespa!e std / int main( )< string saCD,<=a pha?, =e!ho?, =hote ?, =mike?, =romeo?I/ m% tiset-string* o&Qe!t(6saC7D, 6saC9D) / o&Qe!t.insert(=e!ho?) / o&Qe!t.insert(=e!ho?) / m% tiset-string*HHiterator it,o&Qe!t.#ind(=e!ho?) / #or(/ it+,o&Qe!t.end( )/ ++it) !o%t--0it--? = / !o%t--end / !o%t--?M% tisetHHeT%a $range(E?e!hoE?)En? / pair-m% tiset-string*HHiterator m% tiset-string*HHiterator* itpair,o&Qe!t.eT%a $range(=e!h?) / i#(itpair.#irst+,o&Qe!t.end( )) !o%t--? o(er$&o%nd( ) points at?--0itpair.#irst--end / #or(/ itpair.#irst+,itpair.se!ond/ ++itpair.#irst) !o%t--0itpair.#irst--? =/ !o%t--end --o&Qe!t.!o%nt(=e!h?)--?o!!%ren!es o# )e!h) ?--end / !o%t--?M% tisetHHeT%a $range(E?e!hoE?)En?/ itpair,o&Qe!t.eT%a $range(=e!ho?) / #or(/ itpair.#irst+,itpair.se!ond/ ++itpair.#irst) !o%t--0itpair.#irst--? = / !o%t--end --o&Qe!t.!o%nt(=e!ho?)--?o!!%ren!es o# )e!ho) ?--end / !o%t--?M% tisetHHeT%a $range(E?e!hooE?)En? / itpair,o&Qe!t.eT%a $range(=e!hoo?) / #or(/ itpair.#irst+,itpair.se!ond/ ++itpair.#irst) !o%t--0itpair.#irst--? =/ !o%t--end --o&Qe!t.!o%nt(=e!hoo?)--?o!!%ren!es o# )e!hoo) =--end / IJJJHK BBretilen ktC e&h) e&h) e&h) h)tel mike r)me) U%ltisetCCeg%alSrange-Xe&h[/ l)_erSb)%nd- / p)ints at e&h) @ )&&%ren&es )+ ,e&h, U%ltisetCCeg%alSrange-Xe&h)[/ e&h) e&h) e&h)

F )&&%ren&es )+ ,e&h), U%ltisetCCeg%alSrange-Xe&h))[/ @ )&&%ren&es )+ ,e&h)), BB

)sta!k) Bap s3n3#3


sta!k sn+ t veri apsn ina eder# sta!k kaplar k%llanlmadan !n&e aadaki !nilemle i&i !nergesi pr)grama a"lm )lmaldr* .in! %de -sta!k* 9t veri aplar, ilk giren s)n kar -87S ve a ingili"&esi Y8LO ve a L8YO/ aplardr# 9tlarda veriler st ste lr# 8lk erletirilen veri en altta kalr# Tn s)n erletirilen veri en stte b%l%n%r# $% "den bir veri i ttan almak iin !n&e en stteki -s)n giren veri/ veri alnr, taki istenen veri e gelene kadar ilem srer# 9ani s)n giren ilk kar, ve a ilk giren s)n kar# 9tlar verilerin gei&i )larak sakland d%r%mlar iin )k ararldr# <rnek )larak, pr)gramlar ilevlerin !rel deikenlerini tta t%tarlar* deiken !mrleri ilevlerin etkinlik sresi tara+ndan belirlenir# $% sre, pr)gram !mr b) %n&a etkin )lan gl)bal -ve a stati& !rel/ deikenlere g!re )k ksadr# 9ttakiler gei&i, gl)bal )lanlar pr)gram b) %n&a aar# $aka bir !rnek ise hesapla &larda k%llanlan ters d"enleme % g%lamasdr# $%rada ilelerin ilenenleri ta girer, ileler ilenenlerini t dna alr, daha s)nra ilem s)n%larn tekrar ta erletirirler# $% ilemler hesaplama bitene kadar srer gider# (imdi si"e t k%llanarak -D+E/WF ileminin apln g!relim# 6ers d"enleme e g!re aklama* D E + F W )l%r# D E + FW D DE+FW DE+FW DE+FW DE+FW

E F F R D F -D/ -E/ -F/ -G/ -H/ feki 9.9 -D+E/WF ileminin tta ilemlenmesi ' ra iindeki sa larn st ksmlarnda er alan sa lar hesaplamann her

aamasnda tn iini g!stermektedir# $%rada ilemin ters d"enlemesi )lan D E + F W deki her simge tta sra ile ilemlenir# <n&e ta ilk simge D alnr, daha s)nra )n%n stne ta ikin&i simge E erletirilir# ;n& simge )lan + ta !n&eden erletirilmi )lan D ve E arasnda t)plama gerekler# $%rada D ve E ttan ekip alnr ani t b)altlr, t)plama ilemi aplr s)n%&% b)alm )lan ta k)n%r# 9ta b% aamada F -D+E.F/ erlemi )l%r# =aha s)nra t)plam F aada, eni deer F stte )lmak "ere, t eniden d"enlenir# $% aama G# aamadr# S)n aamada -H# aama/ ttaki F ler arasnda W ilemi gereklenir# $% aamada ine ttan F ler alnr ani t b)altlr arpma ilemi gereklenir ve arpm s)n%&% ta erletirilir# 7!rld gibi ileler t iindeki ilenenleri deitirmektedir# 9ta erletirilmekte, ttan alnp ileme tabi t%t%lmakta, s)n% ta a"lmakta ve b%nlar simgeler bitene kadar srmektedir# 'nla a&an" gibi, bir tn tek n)ktasndan -en st n)ktadan/ %ns%rlar girer ve kar# $%radaki st !e, tn hemen g!rlebilen !esidir# Ona d)r%dan eriilebilir ve deitirilebilir# (imdi tn b% alma mekani"masn akln"dan karmadan, sta!k kap sn+ ile neler aplabile&eini g!relim# 'adaki ap& ilevler, ileler, ve e ilevler sta!k sn+ ile k%llanlrlar* WW 9ap& ilevler C ?? $ir sta!k b) )larak ina edilebilir* sta!k-string* o&Qe!t / $%radaki string erine herhangi bir erleik -+l)at, int, d)%ble v#s#/ ve a k%llan& tanml tip k%llanlabilir# Obee&t ise si"in adn k) a&an" herhangi bir nesne )labilir# ?? $ir sta!k k)p a ap& ilev k%llanlarak balatlabilir* e'tern sta!k-string* !ontainer / sta!k-string* o&Qe!t(!ontainer) / WW 8lelerin kaplar iin sade&e temel )lanlar sta!k tara+ndan desteklenir# WW 'adaki e ilevler sta!k sn+nda b%l%n%rlar* ?? &oo sta!kHHempt"( ) C

$% e ilev sta!k te !e )ksa tr%e d!ndrr# ?? void sta!kHHp%sh(va %e) C $% e ilev val%e deerini tn en stne erletirir, !br !eleri g!r alanndan karr# ?? void sta!kHHpop( ) C $% e ilev tn en stnde er alan !e i )radan kaldrr# 'lnan !e b% e ilev&e geri d!ndrlme"# $) bir tta pop( ) k%llanld "aman bir e )lma"# ?? %nsigned sta!kHHsize( ) C $% e ilev sta!k teki !e sa sn d!ndrr# ?? P"pe 6sta!kHHtop( ) C $% e ilev sta&k te en st !e e -g!r alanndaki !e/ da an d!ndrr# $%n%n k%llanm an&ak eer sta!k b) deilse pr)gram&nn s)r%ml%l%%ndadr# $%rada bir k)n% % belirtelim* t ve sta&k a n e dir# 9t trke karldr# Kr)gram a"arken sta&k k%llanlr# sta!k, inele i&ileri ve di"in ile&ini -CD) destekleme", ani b%nlar sta!k ile k%llanlama"# Triilebile&ek )lan tek !e sta!k in en stnde er alan !edir# $ir t tamamen b)altmak iin C W? 'rtarda en stte er alan !eleri kaldrmak W? ' n veri tipinde b) bir sta!k i kendisine atamak W? 9k& ilevini armak )llar k%llanlabilir#

)hash$map) ve &enzeri &a2ka kap ar


map daha !n&e anlatld "ere sral veri apsdr# map te anahtarlarn sralamas anahtar veri tipinin operator -( ) ile&i k%llanlarak salanr# 7enel )larak b% bir !enin saklanmas ve a )radan alnmas iin en h"l )l deildir# 'slnda map te aplan sralama, sral anahtar listelemesinin d"ensi" bir listelemeden daha eki&i )lmasndandr# Sade&e ka"an )d%r# Nerileri daha h"l dep)la p )radan daha h"l almann !ntemi )rba -hashing/ k%llanmaktr# (imdi hashing erine neden )rba kelimesini

k%llandm akla a m* )rba reetesi belli +akat iindekilerin dardan bir bakta saptanamad bir emek trdr# 8indekileri tam )larak )rba apan bilir# 9ani b%rada da )rba ilevini )l%t%ran# 'ma b!ree bakarsan" ham%r% nerede spana nerede bir bakta g!rlr ani here belli bir sralamadadr# )rba, anahtardan bir sa elde etmek iin )rba ilevini k%llanr* b% sa anahtarlarn dep)land tabl)da derhal di"in )larak k%llanlr# $ir anahtarn geri alnmas ise, verilen anahtarn )rba deerinin hesaplanmas ve b%n%n tabl)da di"in erindeki deerine baklmas ile )l%r* anahtar varsa, tabl)da dep)lanr, deeri d!nebilir# 'nahtar )ksa, anahtar dep)lanma"# 3esaplanm )lan di"in eri baka bir !e tara+ndan kaplanmsa, atmalar )rta a kar# $! le d%r%mlar iin s) %t kaplarn bir )k !"m b%l%nmaktadr# 'ma k)n% b% b!lmn snrlarn amaktadr# 7n% g++ derle i&isi hash$(m% ti)map ve hash$(m% ti)set kaplarn desteklemektedir# 7))gle a girip ,C++ hash +%n&ti)n, a"arsan" k)n% ile ilgili )k sa da ka nak b%labilirsini"# (imdi )rba kaplarn bir s)r%n% !"mede k%llanarak k)n% % aklama a alalm# 'nahtar ve deerleri, !elere hep a n srede eriile&ek ekilde dep)la alm ve dep)lanan !eler belli bir sralamada )lmasn# !"mC ilikili )rba kaplarndan biri k%llanlrC b% a hash$map a da hash$set )l%r# 6ekrar belirtelim b% kaplar standart )lma p k%llanmlar maalese+ derle i&iden derle i&i e deiebilir# stlp)rt sitesini ka nak site )larak k%llanabilirsini"# BBC$@HC&)rba#&pp BBhashSset k%llanm .in! %de -iostream* .in! %de -string* .in! %de -hash$set* %sing namespa!e std / int main( )< hash$set-stdHHstring* hsString / string s,?&ravo? / hsString.insert(s) / s,?se ami? / hsString.insert(s) / s,?ko! %? / hsString.insert(s) / #or(hash$set-string*HH!onst$iterator p,hsString.&egin( ) /

p+,hsString.end( ) / ++p) !o%t--0p--end / JJsral )lmas garantili deildir. IJJJHK Kr)gramlama dillerinde )rba kaplar )ld%ka bilinen veri aplardr# 'ma maalese+ C++ dili standartlar iinde hen" b%l%nmamaktadr# )rba kaplarnn -C++ a"l metinelerinde )rba ilikili kaplar )larak geer/ )rtalama temel !"ellii* !elerin belli bir "aman iin erleimi, belli bir srede silme, belli bir srede erletirilebilmesidir# Tn h)a gitme en an ise d)r%sal karmaadr# $tn b% sabit sreli ilemlere ramen )rba kaplarndaki !eler map te )ld%% gibi belli bir sralama da deillerdir# Ondan kark gibi g!rnrler# -neden )rba dedik ///C/ $%rada anlattm" )rba kaplar -hash &)ntainers/ stlp)rt internet sitesinde ele alnan, a gn )larak k%llanlan ktphanelerdir# Si"in k%llanma dndn" baka ktphaneler varsa )nlarda b k ihtimalle ben"er !"ellikler ta a&aktr# 9%kardaki !rnekten g!rle&ei "ere, )rba kaplarnn k%llanm, !br kaplarn bildirimi ve !e erletirilmesi gibi )ld%ka k)la dr# hash$set-string* hsString / BBstring lerin hashSset i string s,?&ravo? / hsString.insert(s) / BBs nin k)p asn erletir# hash$map k%llanm da %kardaki hash$set k%llanmna ben"er, an&ak ek )larak k%llanla&ak )lan hem anahtar hem de veri tipleri belirtilmelidir# hash$map-string, string* hmString / BBstring in string e map i string ke",?ke"? / string va ,?va ? / hmStringCke"D,va / 9%karda anlatlanlar )rba kaplarnn temel k%llanmlardr# )rba ilevi kalp deikenleri k%llanlarak belirlenir, b% sa ede anahtar a nl iin snama ve nesnenin bellee erleimi gereklenir# $ira"dan a rntlar vere&ei"# Ktphanelerin )%nda G eit )rba kab b%l%n%r* -ve b%nlar standart ktphanedeki !teki ilikili kaplar temsil ederler/ hash$map, hash$m% timap, hash$set ve hash$m% tiset# $tn )rba kaplar )rba tabl)s% k%llanlarak gereklenirler# $ir veri aps )lan )rba tabl)s%

!elere sabit srede erime e i"in verir# )rba ilevi k%llanlarak dep)da ki istenen nesne e sra arak eriilir, ani btn s)kaklar d)lamadan d)r%dan adrese paratle inilir# Karat )rba ilevidir# $en"etmeler anlatm k)la latrmak iindir# Si"in +erasetini"e gveni )r%"# hash$map ile hash$set arasndaki temel +ark* verilerin )rba tabl)s%nda nasl dep)land ile ilgilidir# Stlp)rt ta g!sterilen )rba tabl)s% tabanl kaplarn bildirimleri aada verilmitir* hash$map-Be", BBKe -anahtar/ in tipi Aa %e, BB Ke ile ilikili Nal%e -deer/ nin tipi casha%n,hash-Be"*, BBk%llanlan )rba -hash/ ilevi ST%a Be",eT%a $to-Be"*, BBanahtar a nl iin snama BBilevi M o!,a o!* BBbellek erletiri&i hash$set-Be", BBKe -anahtar/ tipi casha%n,hash-Be"*, BBk%llanlan )rba -hash/ ilevi ST%a Be",eT%a $to-Be"*, BBanahtar a nl iin snama BBilevi M o!,a o!* BBbellek erletiri&i $ir hash$map deerleri pair-!onst Be", ,Uata* nesneleri )larak dep)la an )rba tabl)s%d%r# $%n%n anlam* aada )rba tabl)larn belirtirken tabl) daki !eler, anahtarBdeer -ke Bval%e/ pair lerdir - ani i+tlerdir/ demektir# hash$map hibir "aman anahtar ve deerleri a r a r dep)lama"# -aslnda map lerin hibiri a r a r dep)lama apma"/# $ir hash$set ise anahtar -ke / deer -val%e/ tipinde dep)lar# casha%n kalp deikeni bir ilevdir, Be" tipindeki nesneleri size$t )larak saklanan deere evirir# ST%a Be" kalp deikeni de bir ilevdir ve iki deiken barndrr b%nlar a n ise tr%e retir# 7erek hash$map te gerekse hash$set te hi bir "aman iki anahtar a n )lama"# 'ma hash$m% tiset ve hash$m% timap te a n -!"de.eit/ )k sa da anahtar b%l%nabilir# Ne M o! btn kaplarda )ld%% gibi bir bellek erletiri&isidir -all)&at)r/# $ir )rba tabl)s%nda iki b!lm b%l%n%r# $ir tane g!re&eli )larak b k ve&t)r b%l%n%r# $%radaki her di"in bir b%kettir# 3er b%ket ise ksa tekli ve a i+tli iliimli listede ki ilk dmn g!sterge&idir# -stlp)rt ta tekli/ $%

listeler asl verilerin dep)land erdir# )rba kabnda b%l%nan b%ket sa sn &%!ket$!o%nt( ) e ilevi ile elde edebilirsini"#

b%&ketS&)%nt- / g

feki 9.9 ^or&a ta& os% (hash ta& e)


$ir !e erletirdiini" "aman kap !n&e !enin ait )ld%% b%keti belirlemek ")r%ndadr# Kap iin, "erinde b%l%n%lan anahtarn )rba ilevi arlr ve b%ket sa s ile m)dl hesaplanr# $% b%ket ve&t)r %ndaki bir di"ini verir# )rba ile ilgili hi bilgini" )ksa, hemen belirtelim anlalmas k)la bir mev"%d%r# Nerilen bir deer -&har di"isi di elim/ ile, tek deikeni )lan bir )rba ilevi size$t tipinde )rba deeri d!ndrr - ani bir sa /# 8deal )lan genellikle tek )lan -")r%nl%l%k deil/ )rba deerlerini reten )rba ilevine sahip )lmaktr# $% ilev matematik anlamda bire bir ilev deildir# $irden +a"la string a n )rba deerine karlk -map/ )labilir# $ir )rba deerinin nasl g!rndn aadaki !rnekten g!rebiliri"* stdHHhash-!onst !har0* hasa%n / stdHH!o%t--?E?cashomati!E? hashes to? --hasa%n(=cashomati!?)--)En) / 7!rnen aadaki gibi )l%r* =cashomati!? hashes to 1de999:8e

(imdi ksm nesnelerine giri adlarn karlk getiren - ani map eden/ !rnek verelim* BBC$@HCharita#&pp BBsessi)n !neti&isi .in! %de -iostream* .in! %de -string* .in! %de -hash$map* %sing namespa!e std / ! ass Session<J....J I/ JJ)k%ma k)la latrmak iin t pede+ k%llan t"pede# hash$map-string, Session0* SessioncashMap / ! ass SessionManager< p%& i!H SessionManager( ) HsessionMap$(977)< I JB)rba tabl)s%n% balat KSessionManager( )< #or(SessioncashMapHHiterator p,sessionMap$.&egin( )/ p+,sessionMap$.end( )/ ++p) de ete (0p).se!ond / JJSessi)n nesnlerini sil I Session0 addSession(!onst string 6 ogin)< Session0 p,VWLL / i#(+(p,getSession( ogin)))< p,ne( Session( ) / sessionMap$C oginD,p / JJ)perat)r01 ile eni sessi)n ata I ret%rn (p) / I Session0 getSession(!onst string6 ogin)< ret%rn (sessionMap$C oginD) / I JJJ... private H SessioncashMap sessionMap$/ I/ JJJHK 3er anahtar -ke / tek b%ket karlk gelir -map eder/# $%kette birden +a"la anahtar )labilir# $ir b%ket daha !n&e s! lediimi" gibi tek ve a i+t iliimli listedir# =aha +a"la bilgi almak isterseni", g))gle girip ,&++ hash +%n&ti)n,

a"n#

Nine e"i!i er (;terators)


9inele i&iler g!sterge gibi davranan nesnelerdir, ve !"ellikleri* D? $ir iter inele i&isinde 0iter, inele i&inin g!sterdii nesnedir# -baka de ile iter4* inele i&inin iaret ettii nesne elerine erimekte k%llanlabilir/ E? ++iter ve iter++ inele i&i i bir s)nraki !e e ilerletir# 9inele i&i i bir s)nraki !e e ilerletmek, erine g!re % g%lanr* )k sa da kap sn+nda reverse$iterator tipi b%l%n%r, iter++ ilemi ise aslnda di"ideki bir !n&eki !e e eriimi salar# F? 7!sterge aritmetii, !eleri bellekte ardarda b%l%nan kaplarda k%llanlr# $%nlar ve!tor ve deT%e dir# 'nlan kaplarda iter+1, iter in iaret ettii erin ikin&isidir# G? $ir inele i&i karlatrmal )larak sade&e @?g!stergee e g!re tanmlanabilir# 'adaki basit !rnekte b% d%r%m g!rlebilir* BBC$@HCiter#&pp BBtanmlama .in! %de -iostream* .in! %de -ve!tor* %sing namespa!e std / int main( )< ve!tor-int*HHiterator vi/ !o%t*60vi--end / JJ@ a"ar IJJJHK SKK kap sn+lar genellikle &egin( ) ve end( ) e ilevlerini k%llanarak inele i&ileri -!rnek* iterator tipi/ reten eleri tanmlar# 6abii ters inele i&ilerde -reverse$iterator tipi/ k%llanlan ilevler r&egin( ) ve

rend( ) dir# Standart % g%lamada inele i&i alanna s)l tara+ dahil edilir sa tara+ ise bir s)nraki n)kta g!sterir# 9ani Cso "an, saG"an) biiminde g!sterilir# $%radaki so "an inele i&inin ilk deeridir, saG"an ise inele i&inin iaret ettii s)n deerin bir s)nrasdr# 9inele i&i iin so "an ilk deer, saG"an41 ise s)n deerdir# saG"an,,so "an ise, inele i&i alan b) demektir# $) kaplarda &egin ve end inele i&ileri birbirine eittir# 'adaki !rnek* 0begin- /, end- // ve 0rbegin- /, rend- // inele i&i alanlar k%llanlarak string ve&t)r nn btn !elerinin &)%t nesnesine a"drld d%r%m% g!stermektedir* 3er iki inele i&i alan iin +)r d!ngleri !"detir# BBC$@HC strve&t#&pp BBstring ve&t)r .in! %de -iostream* .in! %de -ve!tor* .in! %de -string* %sing namespa!e std / int main(int arg!, !har00 argv)< ve!tor-string* args(argv, argv+arg!)/ #or(ve!tor-string*HHiterator iter,args.&egin( )/ iter+,args.end( )/ ++iter) !o%t--0iter--? = / !o%t--end / #or(ve!tor-string*HHreverse$iterator iter,args.r&egin( )/ iter+,args.rend( )/ ++iter) !o%t--0iter--? = / !o%t--end / ret%rn 7 / IJJJHK $%nlardan baka SKK -standart kalp ktphanesi/ sabit kaplardaki bir di"i !e i "i aret etmesi iin !onst$iterator tipler de tanmlar# <n&eki !rnekte er alan ve!tor !eleri deitirilebilirken, bir s)nraki !rnekte ve!tor !elerinin deitirileme" )lmas iin !onst$iterator lar gerekir# BBC$@HCsabitS inele i&i#&pp BB&)nstSiterat)r k%llanm .in! %de -iostream*

.in! %de -string* .in! %de-ve!tor* %sing namespa!e std / int main(int arg!, !har00 argv)< ve!tor-string* !onst args(argv, argv+arg!)/ #or(ve!tor-string*HH!onst$iterator iter,args.&egin( )/ iter+,args.end( )/ ++iter) !o%t--0iter--? = / !o%t--end / #or(ve!tor-string*HH!onst$reverse$iterator iter,args.r&egin( )/ iter+,args.rend( )/ ++iter) !o%t--0iter--? =/ !o%t--end / ret%rn 7/ IJJJHK <rneklerden, inele i&iler erine bildiimi" basit g!stergelerin de k%llanlabile&eini anla abilirsini"# ve!tor-string* args(argv, argv+arg!) balatmas bir i+t, g!sterge tabanl inele i&isi )lan args ve!tor salar* argv iaret ettii ilk !e i sarg ile balatr, argv+arg! k%llanla&ak )lan s)n !eden !tesini iaret eder, argv++ bir s)nraki string e gider# $% g!stergelerin genel !"elliidir# $%ndan d)la inele i&ilerin beklendii erlerde k%llanlabilmektedirler# SKK H tip inele i&i tanmlamaktadr# $%nlar kalp alg)ritmalarnda k%llanlmaktadrlar ve kendini"e % g%n belli bir tipte inele i&i )l%t%rabilmek iin !"ellikleri i i bilmek )k !nemlidir# 9inele i&iler aadakileri m%tlaka tanmlamaldr* operator,,( ) * iki inele i&i i !"delik iin snar# operator++( ) * inele i&i i bir arttrma, !nartm ile&i# operator0( ) * inele i&inin iaret ettii !e e eriim# 'adaki inele i&iler ilerle en b!lmde anlatlan alg)ritmalar tanmlarken k%llanlr* WW ;np%t;terators -girdi inele i&ileri/ 7irdi inele i&ileri bir kaptan )k% abilir# =a antan k%rtarma ile&inin aklamalarda sa an -rval%e/ )larak almas gven&e e alnmtr#

$%rada anlatla&ak )lan kalp alg)ritmalarla Onp%tOterat)r erine, Y)r_ard? , $idire&ti)nal? , ve a ]and)m'&&essOterat)r? inele i&ileri de k%llanlabilir# WW `%tp%t;terators -kt inele i&ileri/ kt inele i&ileri kaba a"arken k%llanlabilir# =a antan k%rtarma ile&inin aklamalarda s)l an -lval%e/ )larak almas gven&e e alnmtr# Sa an -rval%e/ )larak almas gerekli deildir# O%tp%tOterat)r erine Y)r_ard?, $idire&ti)nal?, ve a ]and)m'&&essOterat)r k%llanlabilir# WWaor(ard;terators -!ndeki inele i&iler/ Y)r_ardOterart)r ler, Onp%tOterat)r ler ile O%tp%tOterat)r leri birara a getirir# $%nlar )k%makB ve a a"mak iin kaplarda bir !nde d)lama salar# Y)r_ardOterat)r erine $idire&ti)nal?, ve a ]and)m'&&essOterat)r ler k%llanlabilir# WW Bidire!tiona ;terators -i+t !nl inele i&iler/ $idire&ti)nalOterat)r ler kaplar )k%mak ve a a"mak iin iki d)r%lt%da d)lama salar# $idire&ti)nalOterat)r ler erine ]and)m'&&essOterat)r ler k%llanlabilir# $ir list ve a deg%e i d)lamak iin $idire&ti)nalOterat)r ler )k ararl )labilir# WW [andomM!!ess;terators -rastgele eriimli inele i&iler/ Kap !elerine rastgele eriimi salar# sort( ) gibi bir alg)ritma ]and)m'&&essOterat)r a gerek d% ar# $%ndan d)la ]and)m'&&essOterat)r ler map ve list lerle k%llanlma"lar# <rneklere bakldnda ]and)m'&&essOterat)r, inele i&iler k)n%s%n%n nasl ilediini g!sterir# Kalp alg)ritma tara+ndan k%llanla&ak )lan inele i&i aranr, daha s)nra veri apsnn b% inele i&i i destekle ip desteklemedii g!rlr# Ter desteklemi )rsa alg)ritma veri aps ile k%llanlama"#

Ner e2im Nine e"i!i eri


Kalp alg)ritmas )% ke" s)n%larn iinde dep)lad bir hede+ kap

k%llanr# <rnein* !op"( ) alg)ritmas F deikene sahiptir, ilk iki deiken "i aret edilen !e alann, n& deikende k)p a ilem s)n%larnn dep)lana&a ilk eri tanmlar# !op"( ) alg)ritmas ile k)p alana&ak )lan !e sa sn daha !n&eden belirlemek mmkndr# $% sa genellikle g!sterge aritmetii k%llanlarak saptanabilir#$%n%nla birlikte g!sterge aritmetiinin k%llanlama a&a ba" d%r%mlar da vardr# $en"er ekilde neti&e !elerin sa s balang alanndakilerden de +arkl )labilir# %niT%e$!op"( ) alg)ritmas dikkate deer bir d%r%ma sahiptir* b%rada var kabna k)p alana&ak )lan !e sa s n)rmalde daha !n&eden bilineme"# $%nlara ben"er d%r%mlarda gerektiinde var kaplarnda !eleri )l%t%rmak iin bir inserter % arla & ilevi -adapt)r +%n&ti)n/ k%llanlr# ; eit inserter( ) % arla & ilevi b%l%n%r* &a!k$inserter( ) C Kap s)n%nan eni !e eklemek iin kabn p%sh$&a!k( ) esini arr# <rnein* s)%r&e, ani ka nan btn !elerini ters sralamada varn arkasna k)p alamak iin C !op"(so%r!e.r&egin( ), so%r!e.rend( ), &a!k$inserter(destination))/ #ront$inserter( ) H Kabn balang&na eni !e eklemek iin kabn p%sh$#ront( ) esini arr# <rnein* var kabnn !n tara+na so%r!e ani ka nan btn !elerini k)p alamak iin -) s%retle !elerin d"enini terslemek iin/ C !op"(so%r!e.&egin( ), so%r!e.end( ), #ront$inserter(destination))/ inserter( ) H Kabn belirlenmi bir n)ktasndan balamak "ere eni !e eklemek iin kabn insert( ) ilevi arlr# <rnein* varn ba ksmndan bala arak, a r&a var)lan !n&eki !eleri eni eklenenlerin !tesine ka drarak, so%r!e ani ka nan btn !elerini k)p alamak iin* !op"(so%r!e.&egin( ), so%r!e.end( ), inserter(destination, destination.&egin( )))/ &a!k$inserter( ) inele i&isine baka&ak )l%rsak inele i&inin p%sh$&a!k( ) esi b%l%nan kabn adn bekeldiini g!rrr"# $% e inserter n operator( )( ) esi tara+ndan arlr# S) %t kaplarn dndaki

sn+ p%sh$&a!k( ) kabn destekledii "aman, eer sn+ aadakini tanmlarsa, nesneleri &a!k$inserter( ) in deikenleri )larak k%llanlabilir* t"pede# UataP"pe !onst6 !onst$re#eren!e / UataP"pe !onst6, sn+n e ilevi p%sh$&a!k( ) deikeninin tipidir# <rnein* ;ntStore bir sn+ tanmlamaktadr, nesneleri &a!k$inserter( ) inele i&isinin deikenleri )larak k%llanlabilir* BBC$@HC=ep)lama#&pp BBOntSt)re k%llanmak .in! %de -iterator* .in! %de -a gorithm* %sing namespa!e std / ! ass N< p%& i!H t"pede# int !onst6 !onst$re#eren!e/ void p%sh$&a!k(int !onst6)< I I/ int main( )< int arrC D,<1I / N"/ !op"(arr, arr+1, &a!k$inserter("))/ IJJJHK

)istream) nesne erinin "ine e"i!i eri


)istream, nesneleri iin istream$iterator-P"pe*( ), inele i&i -pair/ tanmlamak iin k%llanlabilir# istream$iterator-P"pe*( ) inele i&ilerinin genel biimi* istream$iterator-P"pe* identi#ier(istream6 inStream) / $%rada P"pe, istream akndan )k%nan verilerin tipidir# P"pe, istream nesneleri iin tanmlanan operator--( ) e % g%n herhangi bir tip )labilir# Narsa lan ap& ilev ak s)n%na denk gelen inele i&i i+tinin biti erini tanmlar# <rnek*

istream$iterator-string* end`#Stream / $ir &a!k$inserter( ) ve bir gr%p istream$iterator- *( ) % arla & k%llanarak btn string leri !in nesnesinden )k% abiliri"* BBC$@HC)k%Sstring#&pp BBstring leri &in den )k%mak .in! %de -iostream* .in! %de -a gorithm* .in! %de -string* .in! %de -iterator* .in! %de -ve!tor* %sing namespa!e std / int main( )< ve!tor-string* vs / !op"(istream$iterator-string*(!in), istream$iterator-string*( ), &a!k$inserter(vs))/ #or(ve!tor-string*HHiterator #rom,vs.&egin( )/ #rom+,vs.end() )/ ++#rom) !o%t--0#rom--? = / !o%t--end / ret%rn 7/ IJJJHK 9%kardaki !rnekte istream$iterator % arla &larnn, genel srmnn k%llanm g!sterildi# $%rada !"ellikle genel ap& ilev k%llanmna dikkat edilmelidir# ' r&a istreamSiterat)r4string5- / erine aadaki ap da k%llanlabilmektedir* istream$iterator-string* eos / !op"(istream$iterator-string*(!in), eos, &a!k$inverter(vs)) / istream$iterator k%llanlmadan !n&e, aadaki !nilemle i&i !nergesi m%tlaka pr)grama a"lmaldr* .in! %de -iterator* iostream a"ldnda b% da ima edilmi )l%r#

)istream&%#) nesne erinin "ine e"i!i eri


7irdi inele i&ileri -Onp%t Oterat)rs/ streamb%+ nesneleri iin de k%llanlr# istream&%# inele i&ileri k%llanlmadan !n&e, m%tlaka aadaki !nilemle i&i !nergesi pr)grama a"lm )lmaldr* .in! %de -iterator* istream&%#$iterator lar girdi ilemlerini desteklemek iin stream&%# nesnelerini )k%ma a ardm& )l%r# istream$iterator de k%llanlan standart ilemler istream&%#$iterator iinde geerlidir# ; tane ap& ilev b%l%n%r* WW istreamb%+Siterat)r46 pe5- / C $% ap& ilev streamb%+ tan 6 pe tipinde deerler alde edilirken ak inele i&isinin s)n%n% temsil eder# WW istreamb%+Siterat)r46 pe5-istream/ C $% ap& ilev istream nesnesinin streamb%+ erien ve ap& ilevin deikeni )larak k%llanlan istreamb%+Siterat)r %n% ina eder# WW istreamb%+Siterat)r46 pe5-streamb%+W/ C $% ap& ilev adresi ap& ilevin deikeni )larak k%llanlan streamb%+ a erien istreamb%+Siterat)r %n% ina eder# $ir s)nraki b!lmde hem istreamb%+Siterat)r hem de )streamb%+Siterat)r n birlikte k%llanld !rnek verile&ektir#

)ostream) nesne erinin "ine e"i!i eri


ostream$iterator-P"pe*( ), ostream nesnesi iin var inele i&isi tanmlamakta k%llanlr# )streamSiterat)r46 pe5- / n genel biimleri aadadr* ostream$iterator-P"pe* identi#ier(ostream6 o%tStream), BBveC ostream$iterator-P"pe* identi#ier(ostream6 o%tStream,

!har !onst0 de im) / P"pe, ostream akna a"lan verilerin tipidir# P"pe ostream nesneleri ile birlikte operator--( ) n tanmland herhangi bir tip )labilir# 'adaki !rnekte istream$iterator ve ostream$iterator bir d)s adan bilgilerin baka bir d)s a a k)p alanmasnda k%llanld# $%rada ki de imde bir in&elik b%l%nmaktadr* in.%nset#(iosHHskip(s)* b% iosHHskip(s ba ran siler# $%n%n s)n%&%nda operator**( ) n varsa lan davran b)l%a atlamak iin deitirilir# $)l%k karakterleri ile tara+ndan d!ndrlr, ve d)s a snrs" bir biimde k)p alanr, ite pr)gram* BBC$@HC=)s aSk)p a#&pp BB=)s a k)p alama .in! %de -a gorithm* .in! %de -#stream* .in! %de -iomanip* %sing namespa!e std / int main(int arg!, !har00 argv)< i#stream in(argvC1D) / o#stream o%t(argvC1D) / in.%nset#(iosHHskip(s) / !op"(istream$iterator-!har*(in), istream$iterator-!har*( ), ostream$iterator-!har*(o%t)) / ret%rn 7/ IJJJHK ostream$iterator lar k%llanlmadan !n&e aadaki !nilemle i&i !nergesi m%tlaka pr)grama a"lm )lmaldr* .in! %de -iterator*

)ostream&%#) nesne erinin "ine e"i!i eri


$ir ostream&%#$iterator nden !n&e aadaki !nilemle i&i !nergesi m%tlaka pr)grama a"lmaldr* .in! %de -iterator*

ostream&%#$iterator, kt ilemlerini destekler ve stream&%# nesnelerine a"ar# ostream$iterator nesneleri iin geerli )lan btn ilemler ostream&%#$iterator nesneleri iin de geerlidir# 8ki tane ap& ilevi vardr* WW ostream&%#$iterator-P"pe*(ostream) C $% ap& ilev, ap& ilevin deikeni )larak k%llanlan )stream nesnesinin stream&%# %na erien, ostream&%#$iterator n ina eder ve 6 pe tipinde deerler ekler# WW ostream&%#$iterator-P"pe*(stream&%#0) C $% ap& ilev adresi ap& ilevin deikeni )larak k%llanlan stream&%# a erien ostream&%#$iterator ina eder# (imdi akn k)p aland baka bir !rnek verelim* BBC$@HC eniSk)p a#&pp BBk)p alama .in! %de -iostream* .in! %de -a gorithm* .in! %de -iterator* %sing namespa!e std / int main( )< istream&%#$iterator-!har* in(!in.rd&%#( )) / istream&%#$iterator-!har* eo# / ostream&%#$iterator-!har* o%t(!o%t.rd&%#( )) / !op"(in, eo#, o%t) / ret%rn 7/ IJJJHK

M goritma ar

$% ksmda al+abetik sralama ile SKK da er alan alg)ritmalar g!re&ei"# 3er alg)ritma iin sras ile % bilgiler verile&ektir* D? 7ereken balk d)s as# E? 8lev !ntipi# F? Ksa tanm# G? $asit bir !rnek# 'lg)ritma !ntiplerinde temel veri tipi iin 6 pe k%llanlmtr# ' r&a belli bir inele i&i tipi gerektiinde temel tipler gibi, b% da k%llanlmtr#3er alg)ritma alma alann tanmlamak iin 0+irst, last/ inele i&i alann bilmelidir# 9inele i&iler nesneleri ve a deerleri iaret eder# $ir inele i&i bir 6 pe nesne ve a deerini iaret ettii "aman, alg)ritmalar tara+ndan k%llanlan ilev nesneleri genellikle P"pe !onst6 nesneleri ve a deerleri alrC ilev nesneleri b%ndan d)la deiken )larak aldklar nesneleri deitireme"ler# 6abii alg)ritmalarn "erinde ilem apt nesnelerde deiiklik aparak alg)ritmalar da deitirmenin d)r% )ld%%n% s! le eme i"# 'lg)ritmalar k%llanldklara erlere g!re sn+landrarak, aklamalarm" srdre&ei"# WW Karlatr&larC !eleri -alanlar ile beraber/ karlatrr* 7erekenC .in! %de -a gorithm* eT%a ( ), in! %des( ), e'i!ographi!a $!ompare( ), ma'( ), min( ), mismat!h( ). WW K)p ala &larC k)p a ilemlerini gerekletirirler* 7erekenC .in! %de -a gorithm* !op"( ), !op"$&a!k(ard( ), partia $sort$!op"( ), remove$!op"( ), remove$!op"$o#( ), rep a!e$!op"( ), rep a!e$!op"$i#( ), %niT%e$!op"( ). WW Sa &larC sa ma ilemlerini gerekletirirler* 7erekenC .in! %de -a gorithm* !o%nt( ), !o%nt$i#( ). WW Kme ileleriC maZ?kme deiimleri* 7erekenC .in! %de -a gorithm* make$heap( ), pop$heap( ), p%sh$heap( ), sort$heap( ).

WW $alat&larC veri i balatma* 7erekenC .in! %de -a gorithm* #i ( ), #i $n( ), generate( ), generate$n( ). WW 8lelerC belli bir d"ende aritmetik ilemleri gerekletirme* 7erekenC .in! %de -n%meri!* adQa!ent$di##eren!e( ), a!!%m% ate( ), inner$prod%!t( ), partia $s%m( ). WW 'ra &larC arama -ve b%lma/ ilemlerini gerekletirme* 7erekenC .in! %de -a gorithm* adQa!ent$#ind( ), &inar"$sear!h( ), eT%a $range( ), #ind( ), #ind$i#( ), #ind$end( ), #ind$#irst$o#( ), o(er$&o%nd( ), ma'$e ement( ), min$e ement( ), sear!h( ), sear!h$n( ), set$di##eren!e( ), set$interse!tion( ), set$s"mmetri!$di##eren!e( ), set$%nion( ), %pper$&o%nd( ). WW Karma&larC eniden d"enleme ilemlerini gerekletirme* 7erekenC .in! %de -a gorithm* inp a!e$merge( ), iter$s(ap( ), merge( ), ne't$perm%tation( ), nth$e ement( ), partia $sort( ), partia $sort$!op"( ), partition( ), prev$perm%tation( ), random$sh%## e( ), remove( ), remove$!op"( ), remove$i#( ), remove$!op"$i#( ), reverse( ), reverse$!op"( ), rotate( ), rotate$!op"( ), sort( ), sta& e$partition( ), sta& e$sort( ), s(ap( ), %niT%e( ). WW :i aretilerC bir alandaki !eleri "i aret edenlerC 7erekenC .in! %de -a gorithm* #or$ea!h( ), rep a!e( ), rep a!e$!op"( ), rep a!e$i#( ), rep a!e$!op"$i#( ), trans#orm( ), %niT%e$!op"( ).

a!!%m% ate( )
$alk =)s asC ^in&l%de 4n%meri&5 8lev !ntipleriC ?? P"pe a!!%m% ate(;np%t;terator #irst, ;np%t;terator ast, P"pe init)/

??

P"pe a!!%m% ate(;np%t;terator #irst, ;np%t;terator ast, P"pe init, Binar"`peration op)/

'klamaC 8lk !ntipteC inele i&i alann&a belirtilen btn !elere ve balang deeri )lan init e operator+( ) % g%lanr# Aeti&e deer d!ner# 8kin&i !ntipteC inele i&i alann&a belirtilen btn !elere ve balang deeri )lan init e binar ile )lan op( ) % g%lanr# Aeti&e deer d!ner# <rnekC BBC$@HCa&&%#&pp BBa&&%m%late k%llanm .in! %de -n%meri!* .in! %de -iostream* .in! %de -ve!tor* %sing namespa!e std / int main( )< int iaCD,<1, 1, 5, 8I/ ve!tor-int* iv(ia, ia+8)/ !o%t--?deger erin top ami?--a!!%m% ate(iv.&egin( ), iv.end( ), int( )) ---end --?deger erin !arpimi?--a!!%m% ate(iv.&egin( ), iv.end( ), int(1), m% tip ies-int*( ))--end / ret%rn 7/ IJJJHK BBretilen ktC degerlerin t)plamiC D@ degerlerin &arpimiC EG BB

adQa!ent$di##eren!e( )
$alk d)s asC ^in&l%de 4n%meri&5 8lev !ntipleriC ?? `%tp%t;terator adQa!ent$di##eren!e(;np%t;terator #irst,

;np%t;terator ast, `%tp%t;terator res% t)/ ?? `%tp%t;terator adQa!ent$di##eren!e(;np%t;terator #irst, ;np%t;terator ast, `%tp%t;terator res% t, Binar"`peration op)/ 'klamaC $tn ilemler esas deerler "erinde aplr# 3esaplanan deerlerin hepsi d!nen deerlerdir# ?? 8lk !ntipC 8lk d!nen !e girdi alanndaki ilk !e e eittir# =!nen !elerin geri kalanlar, girdi alannda denk gelen !e ile bir !n&eki !enin +arkna eittir# ?? 8kin&i !ntipC 8lk d!nen !e girdi alanndaki ilk !e e eittir# =!nen !elerin geri kalanlar, girdi alannda denk gelen !e -s)l ilenen/ ile bir !n&eki !e e -sa ilenen/ binar )perat)r op % g%lanmas neti&esine eittir# <rnekC BBC$@HCadeSdi+#&pp BBadea&entSdi++eren&e !rnei .in! %de -iostream* .in! %de -n%meri!* .in! %de -ve!tor* %sing namespa!e std/ int main( )< int iaCD,<1, 1, 9, 17I/ ve!tor-int* iv(ia, ia+8)/ ve!tor-int* ov(iv.size( ))/ adQa!ent$di##eren!e(iv.&egin( ), iv.end( ), ov.&egin( ))/ !op"(ov.&egin( ), ov.end( ), ostream$iterator-int*(!o%t, = =))/ !o%t--end / adQa!ent$di##eren!e(iv.&egin( ), iv.end( ), ov.&egin( ), min%s-int*( ))/ !op"(ov.&egin( ), ov.end( ), ostream$iterator-int*(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHK BBretilen ktC DDFH DDFH BB

adQa!ent$#ind( )
$alkd)s asC .in! %de -a gorithm* 8lev !ntipleriC ?? aor(ard;terator adQa!ent$#ind(aor(ard;terator #irst, aor(ard;terator ast)/ ?? `%tp%t;terator adQa!ent$#ind(aor(ard;terator #irst, aor(ard;terator ast, >redi!ate pred)/ 'klamaC ?? 8lk !ntipC ilk i+t bitiik iki eit !enin ilk !esini iaret eden inele i&i d!ner# $! le bir !e )ksa ) "aman s)n !e -last/ d!ner# ?? 8kin&i !ntipC iki bitiik !enin ilk i+tinin ilk !esini iaret eden ve b%n%n iin de binar klem pred i tr%e d!ndren inele i&i i d!ndrr# $! le bir !e )ksa ) "aman s)n !e -last/ d!ner# <rnekC BBC$@HCadeS+in#&pp BBadea&entS+ind- / !rnei .in! %de -iostream* .in! %de -string* .in! %de -a gorithm* ! ass ST%aresUi##< %nsigned d$minim%m/ p%& i!H ST%aresUi##(%nsigned minim%m) H d$minim%m(minim%m) <I &oo operator( ) (%nsigned #irst, %nsigned se!ond)< ret%rn se!ond0se!ond4#irst0#irst *,d$minim%m/ I I/ %sing namespa!e std/ int main( )<

string sarrCD,<=a pha?, =&ravo?, =!har e"?, =de ta?, =e!ho?, =e!ho?, =#o'trot?,?go #?I/ string0 ast,sarr+sizeo#(sarr)Jsizeo#(string) / string0 res% t,adQa!ent$#ind(sarr, ast) / !o%t--0res% t--end / res% t,adQa!ent$#ind(++res% t, ast) / !o%t--?ikin!i se#er, &ir sonraki "erden &as arHEn?-(res% t,, ast X =000daha #az a &itisik a"ni oge "ok000? H =0res% t?)--end / %nsigned ivCD,<1, 1, 5, 8, 9, :, F, d, e, 17I/ %nsigned0 i ast,iv+sizeo#(iv)Jsizeo#(%nsigned) / %nsigned0 ires,adQa!ent$#ind(iv, i ast, ST%aresUi##(17))/ !o%t--?kare eri #arki en az 17 o an i k sa"i arH = --0ires--? ve =--0(ires+1)--end / ret%rn 7/ IJJJHK BBretilen ktC e&h) ikin&i se+er, bir s)nraki erden baslarC WWWdaha +a"la bitisik a ni )ge )kWWW kareleri +arki en a" D@ )lan ilk sa ilarC H ve > BB

&inar"$sear!h( )
$alk d)s asC .in! %de -a gorithm* 8lev !ntipleriC ?? &oo &inar"$sear!h(aor(ard;terator #irst, aor(ard;terator ast, P"pe !onst6 va %e)/ ?? &oo &inar"$sear!h(aor(ard;terator #irst, aor(ard;terator ast, P"pe !onst6 va %e, Comparator !omp)/ 'klamaC

?? $irin&i !ntipC 0+irst, last/ inele i&i alan !elerinde binar arama aparak val%e deerini ara p b%lmak# 6 peCC)perat)r4- / ilevi, alandaki !eleri sra a k) m% )lmaldr# 'ranan !e b%l%n%rsa tr%e d!ner )k eer aranan !e b%l%nama"sa +alse d!ner# ?? 8kin&i !ntipC 0+irst, last/ inele i&i alan !elerinde binar arama aparak val%e deerini ara p b%lmak# C)mparat)r ilev nesnesi alandaki !eleri m%tlaka sra a k) m% )lmaldr# 'ranan !e b%l%nd%%nda tr%e d!ner, aranan !e b%l%nama"sa +alse d!ner# <rnekC BBC$@HCiki&iSarama#&pp BBbinar Ssear&h k%llanm .in! %de -a gorithm* .in! %de -string* .in! %de -iostream* .in! %de -#%n!tiona * %sing namespa!e std/ int main( )< string sarrCD,<=a pha?, =&ravo?, =!har e"??de ta?, =e!ho?, =#o'trot?, =go #?, =hote ?I/ string0 ast,sarr+sizeo#(sarr)Jsizeo#(string)/ &oo res% t,&inar"$sear!h(sarr, ast, =#o'trot?)/ !o%t--(res% t X =&% %nd%? H =&% %nmadi?)--?#o'trot?--end / reverse(sarr, ast) / JB!e sralamasn ters d"enle BBimdi binar ara p b%lma alma" res% t,&inar"$sear!h(sarr, ast, =#o'trot?)/ !o%t--(res% t X =&% %nd%? H =&% %nmadi?)--?#o'trot?--end / BB% g%n &)mparat)r k%llanldnda tamamC res% t,&inar"$sear!h(sarr, ast, =#o'trot?, greater-string*( ))/ !o%t--(res% t X =&% %nd%? H =&% %nmadi?)--?#o'trot?--end / ret%rn 7/ IJJJHK BBretilen ktC b%l%nd% +)Ztr)t b%l%nmadi +)Ztr)t b%l%nd% +)Ztr)t BB

!op"( )
$alk d)s asC .in! %de -a gorithm* 8lev !ntipiC ?? `%tp%t;terator !op"(;np%t;terator #irst, ;np%t;terator ast, `%tp%t;terator destination)/ 'klamaC 0+irst, last/ inele i&i alanndaki !eler, belirlenmi veri tipine ait atama ile&i k%llanlp destinati)n dan bala arak kt alanna k)p alanr# =!n deeri, var alanna k)p alanan s)n !enin hemen !tesini iaret eden O%tp%tOterat)r dr# -b! le&e var alanndaki ,last, d!ner/# <rnekC &all- / ilevine ikin&i ar bildirile&ek# string nesneleri iin )streamSiterat)r k%llanla&ak# $% inele i&i string deerlerini a rma string i -X X/ k%llanarak belirlenmi )stream e - ani &)%t/ a"lr# BBC$@HCk)p ala#&pp BB&)p - / !rnei .in! %de -iostream* .in! %de -a gorithm* .in! %de -string* .in! %de -iterator* %sing namespa!e std/ int main( )< string sarrCD,<=a pha?, =&ravo?, =!har e"?, =de ta?, =e!ho?, =#o'trot?, =go #?, =hote ?I/ string0 ast,sarr+sizeo#(sarr)Jsizeo#(string)/ !op"(sarr+1, ast, sarr)/ BBbtn !eleri iki adm s)la ka dr BBstring ler iin )streamSiterat)r k%llanarak &)%t a k)p ala !op"(sarr, ast, ostream$iterator-string*(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHK BBretilen ktC

&harle delta e&h) +)Ztr)t g)l+ h)tel g)l+ h)tel BB ' r&a %niT%e$!op" e bakn"#

!op"$&a!k(ard( )
$alk d)s asC .in! %de -a gorithm* 8lev !ntipiC ?? Bidire!tiona ;terator !op"$&a!k(ard(;np%t;terator #irst, ;np%t;terator ast, Bidire!tiona ;terator ast1)/ 'klamaC ?? 0+irst, last/ inele i&i alannda b%l%nan !eler, belirlenmi veri tipine % g%n atama ile&ini k%llanp, last?D erindeki !eden bala arak +irst erindeki !e e kadar -+irst dahil/, lastE?D de s)nlanma ile, k)p alanr# $%ndan d)la var alan 0lastE?-last?+irst/, lastE/ dir# =!nen deer, var alanna k)p alanan s)n !e i iaret eden, $idire&ti)nalOterat)r dr# -b! le&e var alanndaki ,+irst,, lastE?-last?+irst/ iaret edilen, d!ner/# 9ani s)n !eden bala arak bir alan k)p alar# <rnekC BBC$@HCk)p aSgeri#&pp BB&)p Sba&k_ard- / !rnei .in! %de -iostream* .in! %de -string* .in! %de -a gorithm* .in! %de -iterator* %sing namespa!e std/ int main( )< string sarrCD,<=a pha?, =&ravo?, =!har e"?, =de ta?, =e!ho?, =#o'trot?, =go #?, =hote ?I/ string0 ast,sarr+sizeo#(sarr)Jsizeo#(string)/ !op"(!op"$&a!k(ard(sarr+5, ast, ast45), ast, ostream$iterator-string*(!o%t, = =))/ !o%t--end /

ret%rn 7/ IJJJHK BBretilen ktC g)l+ h)tel +)Ztr)t g)l+ h)tel +)Ztr)t g)l+ h)tel BB

!o%nt( )
$alk d)s asC .in! %de -a gorithm* 8lev !ntipiC ?? size$t !o%nt(;np%t;terator #irst, ;np%t;terator ast, P"pe !onst6 va %e)/ 'klamaC 0+irst, last/ inele i&i alannda val%e deerinin ka de+a b%l%nd%% d!ndrlr# 9inele i&i alannda val%e deerine eit ka tane !e b%l%nd%% P"peHHoperator,,( ) ile&i ile saptanr# <rnekC BB$@HCsa #&pp BB&)%nt- / ilev k%llanm .in! %de -a gorithm* .in! %de -iostream* %sing namespa!e std/ int main( )< int iaCD,<1, 1, 5, 8, 5, 8, 1, 1, 5I/ !o%t--?5 degerinin k% anim sa"isiH =-!o%nt(ia, ia+sizeo#(ia)Jsizeo#(int), 5)--end / ret%rn 7/ IJJJHK BBretilen ktC F degerinin k%llanim sa isiC F BB

!o%nt$i#( )

$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipiC ?? si"eSt &)%ntSi+-Onp%tOterat)r +irst, Onp%tOterat)r last, Kredi&ate predi&ate/* 'klamaC +irst, last inele i&i alanndaki !elere % g%landnda tekli klem ,predi&ate, in tr%e d!ndrd sa d!ner# 9ani k)%la % an !e sa sn d!ner# <rnekC BBC$@HCsa Seger#&pp BB&)%ntSi+- / ilev k%llanm .in! %de -iostream* .in! %de -a gorithm* ! ass Pek< p%& i!H &oo operator( )(int va %e)< ret%rn va %e6 1/ I I/ %sing namespa!e std/ int main( )< int iaC D,<1, 1, 5, 8, 5, 8, 1, 1, 5I/ !o%t--?dizideki tek sa"i adediH = --!o%nt$i#(ia, ia+sizeo#(ia)Jsizeo#(int), Pek( ))--end / ret%rn 7/ IJJJHK BBretilen ktC di"ideki tek sa i adediC H BB

eT%a ( )
$alk d)s asC

^in&l%de 4alg)rithm5 8lev !ntipleriC ?? b))l eg%al-Onp%tOterat)r +irst, Onp%tOterat)r last, Onp%tOterat)r )therYirst/* ?? b))l eg%al-Onp%tOterat)r +irst, Onp%tOterat)r last, Onp%tOterat)r )therYirst, $inar Kredi&ate pred/* 'klamaC ?? $irin&i !ntipC 0+irst, last/ alanndaki !eler a n %"%nl%ktaki )therYirst ten bala an alandaki !elerle karlatrlr# 8lev a n %"%nl%kta ki her iki alanda eit !e i+tlerine rastladnda tr%e retir# 'slnda alanlarn tamamnn eit )lmas gerekme ebilir, sade&e belirtilen karlatrma alanlar a n )lsa eterlidir# -tabii ki belirtilen alan m%tlaka b%l%nmaldr/# ?? 8kin&i !ntipC 0+irst, last/ alanndaki !eler a n %"%nl%kta ki )therYirst ten bala an alandaki !elerle karlatrlr# 3er iki alanda karlkl gelen btn !elerin tr%e rettii her karlkl i+te, $inar klem -pred/ % g%landnda ilev tr%e retir# 3er iki alann tamamnn eit )lmas gerekme", sade&e dikkate alnan !elerin sa snn a n )lmas eterlidir# -tabii ki belirtilen alan m%tlaka b%l%nmaldr/# <rnekC BBC$@HCesit#&pp BBeg%al- / ilev !rnei .in! %de -a gorithm* .in! %de -string* .in! %de -iostream* ! ass CaseString< p%& i!H &oo operator( )(stdHHstring !onst6 #irst, stdHHstring !onst6 se!ond) !onst< ret%rn +str!ase!mp(#irst.!$str( ), se!ond.!$str( )) / I I/ %sing namespa!e std/ int main( )< string #irstCD,<=M pha?, =&ravo?, =Char e"?, =de ta?, =S!ho?, =#o'trot?, =\o #?, =hote ?I/ string se!ondCD,<=a pha?, =&ravo?, =!har e"?, =de ta?, =e!ho?, =#o'trot?, =go #?, =hote ?I/ string0 ast,#irst+sizeo#(#irst)Jsizeo#(string)/

!o%t--?Phe e ements o# )#irst) and )se!ond) are pair(ise?-(eT%a (#irst, ast, se!ond) X =eT%a ? H =not eT%a ?)-end --?!ompared !ase4insensitive ", the" are?-(eT%a (#irst, ast, se!ond, CaseString( )) X =eT%a ? H =not eT%a ?) --end / ret%rn 7/ IJJJHK BBretilen ktC 6he elements )+ ,+irst, and ,se&)nd, are pair_ise n)t eg%al &)mpared &ase?insensitivel , the are eg%al# BB

eT%a $range( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipleriC ?? pair4Y)r_ardOterat)r, Y)r_ardOterat)r5 eg%alSrange-Y)r_ardOterat)r +irst, Y)r_ardOterat)r last, 6 pe &)nstV val%e/* ?? pair4Y)r_ardOterat)r, Y)r_ardOterat)r5 eg%alSrange-Y)r_ardOterat)r +irst, Y)r_ardOterat)r last, 6 pe &)nstV val%e, C)mpare &)mp/* 'klamaC -map ve m%ltimap teki a n isimli e ilevlere de bakn"/ ?? 8lk !ntipC Sra a k)nm% )lan bir di"iden bala arak -belirtilen alandaki veri tipinin iaret ettii inele i&i ile )perat)r4- / ile&i k%llanlarak !eler sralanr/, g!re&eli )larak l)_erSb)%nd- / -belirtilen da an deerinden daha kk )lma an ilk !e i d!ner/ ve %pperSb)%nd- / -belirtilen da an deerinin !tesindeki ilk !e i d!ner/ d!n deerini temsil eden bir i+t inele i&i d!ner# ?? 8kin&i !ntipC Sra a k)nm% )lan bir di"iden bala arak -&)mp ilev nesnesi belirtilen alanda sra a k) ma ileminde k%llanlr/, g!re&eli )larak l)_erSb)%nd- / ve %pperSb)%nd- /d!n deerini temsil eden bir i+t inele i&i d!ner# <rnekC BBC$@HCesitSalan#&pp

BBeg%alSrange- / alg)ritma k%llanm .in! %de -iostream* .in! %de -a gorithm* .in! %de -iterator* .in! %de -#%n!tiona * %sing namespa!e std/ int main( )< int rangeCD,<1, 5, 9, F, F, e, e, eI/ %nsigned !onst size,sizeo#(range)Jsizeo#(int)/ pair-int0, int0* pi / pi,eT%a $range(range, range+size, :)/ !o%t--? o(er$&o%nd #or :H =--0pi.#irst--end / !o%t--?%pper$&o%nd #or :H =--0pi.se!ond--end / pi,eT%a $range(range, range+size, F)/ !o%t--? o(er$&o%nd #or FH =/ !op"(pi.#irst, range+size, ostream$iterator-int*(!o%t, = =))/ !o%t--end / !o%t--?%pper$&o%nd #or FH =/ !op"(pi.se!ond, range+size, ostream$iterator-int*(!o%t, = =))/ !o%t--end / sort(range, range+size, greater-int*( ))/ !o%t--?sorted in des!ending orderEn?/ !op"(range, range+size, ostream$iterator-int*(!o%t, = =))/ !o%t--end / pi,eT%a $range(range, range+size, F, greater-int*( ))/ !o%t--? o(er$&o%nd #or FH =/ !op"(pi.#irst, range+size, ostream$iterator-int*(!o%t, = =))/ !o%t--end / !o%t--?%pper$&o%nd #or FH =/ !op"(pi.se!ond, range+size, ostream$iterator-int*(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHK BBretilen ktC l)_erSb)%nd +)r >C d %pperSb)%nd +)r >C d l)_erSb)%nd +)r dC d d R R R %pperSb)%nd +)r dC R R R s)rted in des&ending )rder RRRddHFD

l)_erSb)%nd +)r dC d d H F D %pperSb)%nd +)r dC H F D BB

#i ( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipiC ?? v)id +ill-Y)r_ardOterat)r +irst, Y)r_ardOterat)r last, 6 pe &)nstV val%e/* 'klamaC ?? 0+irdt, last/ inele i&i alannn belirttii btn !eler val%e deeri ile -!n&eden sakl deerlerin "erine de a"larak/ balatlr# <rnekC BBC$@HCd)ld%r#&pp BB+ill- / alg)ritma k%llanm .in! %de -iostream* .in! %de -a gorithm* .in! %de -ve!tor* .in! %de -iterator* %sing namespa!e std/ int main( )< ve!tor-int* iv(d) / #i (iv.&egin( ), iv.end( ), d)/ !op"(iv.&egin( ), iv.end( ), ostream$iterator-int*(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHK BBretilen ktC ```````` BB

#i $n( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipiC ?? v)id +illSn-Y)r_ardOterat)r +irst, Si"e n, 6 pe &)nstV val%e/* 'klamaC ?? +irst ten bala arak n !e val%e deeri ile ilk deer atamalar aplr, $% !elerin !n&eki deerleri "erine de balatma deeri a"labilir, belirtelim# <rnekC BBC$@HCnSd)ld%r#&pp BB+illSn- / alg)ritma !rnei .in! %de -iostream* .in! %de -a gorithm* .in! %de -ve!tor* .in! %de -iterator* %sing namespa!e std/ int main( )< ve!tor-int* iv(d)/ #i $n(iv.&egin( )+1, 8, d)/ !op"(iv.&egin( ), iv.end( ), ostream$iterator-int*(!o%t, = =))/ !o%t--end / ret%rn 7/ IBBBCJ BBretilen ktC @@````@@ BB

#ind( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipiC ?? Onp%tOterat)r +ind-Onp%tOterat)r +irst, Onp%tOterat)r last,

6 pe &)nstV val%e/* 'klamaC ?? C#irst, ast) inele i&i alanndaki !elerde val%e !esi aratrlr# 9inele i&inin saptad ilk !e d!ner# 9)k eer !e b%l%nma"sa ) "aman last d!ner# <eleri karlatrmak iin belirtilen veri tipinini operator,,( ) ile&i k%llanlr# <rnekC BBC$@HCb%l#&pp BB+ind- / alg)ritma k%llanm .in! %de -iostream* .in! %de -a gorithm* .in! %de -string* .in! %de -iterator* %sing namespa!e std/ int main( )< string sarrCD,<=a pha?, =&ravo?, =!har e"?, =de ta?, =e!ho?I/ string0 ast,sarr+sizeo#(sarr)Jsizeo#(string)/ !op"(#ind(sarr, ast, =de ta?), ast, ostream$iterator-string*(!o%t, = =))/ !o%t--end / i#(#ind(sarr, ast, =india?),, ast)< !o%t--?india &% %namadiEn?/ !op"(sarr, ast, ostream$iterator-string*(!o%t, = =))/ !o%t--end / I ret%rn 7 / IJJJHK BBretilen ktC delta e&h) ,india, b%l%namadi alpha brav) &harle delta e&h) BB

#ind$end( )
$alk d)s asC

^in&l%de 4alg)rithm5 8lev !ntipleriC ?? Y)r_ardOterat)rD +indSend-Y)r_ardOterat)rD +irstD, +)r_ardOterat)rD lastD, Y)r_ardOterat)rE +irstE, Y)r_ardOterat)rE lastE/ ?? Y)r_ardOterat)rD +indSend-Y)r_ardOterat)rD +irstD, +)r_ardOterat)rD lastD, Y)r_ardOterat)rE +irstE, Y)r_ardOterat)rE lastE, $inar Kredi&ate pred/ 'klamaC ?? 8lk !ntipC 0+irstD, lastD/ te ki !e di"ilerinde 0+irstE, lastE/ te ki !e di"isinin s)n tekrarn ara p b%l%r# Ter 0+irstE, lastE/ di"isi b%l%nma"sa, ) "aman lastD d!ner, )k eer b%l%n%rsa % an di"inin ilk !esini iaret eden inele i&i d!ner# 3er iki di"inin karlatrmasnda ilgili veri tipinin )perat)r..- / k%llanlr# ?? 8kin&i !ntipC 0+irstD, lastD/ te ki !e di"ilerinde 0+irstE, lastE/ te ki !e di"isinin s)n tekrarn ara p b%l%r# Ter 0+irstE, lastE/ di"isi b%l%nma"sa ) "aman lastD d!ner, b%l%n%rsa % an di"inin ilk !esini iaret eden inele i&i d!ner# 3er iki di"inin karlatrmasnda ilgili veri tipinin )perat)r..- / k%llanlr# $inar Kredi&ate ise her iki di"ideki !elerin karlatrmasnda k%llanlr# <rnekC BBC$@HCenSs)n%Sb%l#&pp BB+indSend- / ag)ritma k%llanm .in! %de -iostream* .in! %de -a gorithm* .in! %de -iterator* .in! %de -string* ! ass P(i!e< p%& i!H &oo operator( )(%nsigned #irst, %nsigned se!ond) !onst< ret%rn #irst,,(se!ond--1)/ I I/ %sing namespa!e std/ int main( )< string sarrCD,<=a pha?, =&ravo?, =!har e"?, de ta?, =e!ho?, =#o'trot?, =go #?, =hote ?, #o'trot?, =go #?, =hote ?, =india?, =Q% iet?,

=?ki o?I/ string sear!hCD,<=#o'trot?, =go #?, =hote ?I/ string0 ast, sarr+sizeo#(sarr)Jsizeo#(string)/ !op"(#ind$end(sarr, ast, sear!h, sear!h+5), JJdizi &a2 3"or ast, ostream$iterator-string*(!o%t, = =))/ JJ1. #o'trot ta !o%t--end / %nsigned rangeCD,<1, 8, :, d, 17, 8, :, d, 17I/ %nsigned nrsCD,<1, 5, 8I/ !op" JJson dizide &a2 a"an deGer erin dizisi (#ind$end(range, range+e, nrs, nrs+5, P(i!e( )), range+e, ostream$iterator-%nsigned*(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHK BBtretilen ktC +)Ztr)t g)l+ h)tel india e%liet kil) G > ` D@ BB

#ind$#irst$o#( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipleriC ?? Y)r_ardOterat)rD +indS+irstS)+-Y)r_ardOterat)rD +irstD, Y)r_ardOterat)rD lastD, Y)r_ardOterat)rE +irstE, Y)r_ardOterat)rE lastE/* ?? Y)r_ardOterat)rD +indS+irstS)+-Y)r_ardOterat)rD +irstD, Y)r_ardOterat)rD lastD, Y)r_ardOterat)rE +irstE, Y)r_ardOterat)rE lastE, $inar Kredi&ate pred/* 'klamaC ?? $irin&i !ntipC 0+irstD, lastD/ daki !eler di"isi, 0+irstE, lastE/ !eler di"isinde b%l%nan bir !enin ilk ke" )rta a k iin aratrlr# 0+irstE, lastE/ di"isinde !e b%l%nma"sa ) "aman lastD d!ner# 'ksi d%r%mda 0+irstE, lastE/ deki bir !e e eit )lan 0+irstD, lastD/ daki ilk !e i iaret eden inele i&i d!ner# 3er iki di"ideki !eleri karlatrmak iin

k%llanlan veri tipinin )perat)r..- / k%llanlr# ?? 8kin&i !ntipC 0+irstD, lastD/ daki !eler di"isi, 0+irstE, lastE/ !eler di"isinde b%l%nan bir !enin ilk ke" )rta a k iin aratrlr# 0+irstD, lastD/ da ki her !e, 0+irstE, lastE/ da ki her !e ile karlatrlr, $inar Kredi&ate pred ve 0+irstE, lastE/ da tr%e d!ndren, 0+irstD, lastD/ da ki ilk !enin inele i&isi d!ner# 'ksi d%r%mda lastD d!ner# <rnekC BBC$@HCilkiniSb%l#&pp BB+indS+irstS)+- / k%llanm .in! %de -a gorithm* .in! %de -string* .in! %de -iostream* .in! %de -iterator* ! ass P(i!e< p%& i!H &oo operator( )(%nsigned #irst, %nsigned se!ond) !onst< ret%rn #irst,,(se!ond--1)/ I I/ %sing namespa!e std/ int main( )< string sarrCD,<=a pha?, =&ravo?, =!har e"?, =de ta?, =e!ho?, =#o'trot?, =go #?, =hote ?, =#o'trot?, =go #?, =hote ? =india?, =Q% iet?, =ki o?I/ string sear!hCD,<=#o'trot?, =go #?, =hote ?I/ string0 ast,sarr+sizeo#(sarr)Jsizeo#(string)/ !op"(#ind$#irst$o#(range, range+e, nrs, nrs+5, P(i!e( )), range+e, ostream$iterator-%nsigned*(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHK BBretilen ktC +)Ztr)t g)l+ h)tel +)Ztr)t g)l+ h)tel india e%liet kil) G > ` D@ G > ` D@ BB

#ind$i#( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipiC ?? Onp%tOterat)r +indSi+-Onp%tOterat)r +irst, Onp%tOterat)r last, Kredi&ate pred/* 'klamaC ?? 0+irst, last/ inele i&i alannn g!sterdii !elerden, predi&ate pred -tek deerli.%nar / in tr%e d!nd ilk !e i iaret eden inele i&i i d!ner# <e b%l%nma"sa ) "aman last d!ner# <rnekC BBC$@HC b%lSeger#&pp BB+indSi+- / k%llanm .in! %de -a gorithm* .in! %de -iostream* .in! %de -string* .in! %de -iterator* ! ass CaseVame< stdHHstring d$string/ p%& i!H CaseVame(!har !onst0 str) H d$string(str)< I &oo operator( )(stdHHstring !onst6 e ement)< ret%rn +str!ase!mp(e ement.!$str( ), d$string.!$str( ))/ I I/ %sing namespa!e std/ int main( )< string sarrCD,<=M pha?, =Bravo?, =Char e"?, =Ue ta?, =S!ho?I/ string0 ast,sarr+sizeo#(sarr)Jsizeo#(string)/ !op"(#ind$i#(sarr, ast, CaseVame(=!har e"?)), ast, ostream$iterator-string*(!o%t, = =))/ !o%t--end / i#(#ind$i#(sarr, ast, CaseVame(=india?),, ast)< !o%t--? )india) a anda &% %namadiEn?/

!op"(sarr, ast, ostream$iterator-string*(!o%t, = =))/ !o%t--end / I ret%rn 7/ IJJJHK BBretilen ktC Charle =elta T&h) ,india, alanda b%l%namadi 'lpha $rav) Charle =elta T&h) BB

#or$ea!h( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipiC ?? Y%n&ti)n +)rSea&h-Y)r_ardOterat)r +irst, Y)r_ardOterat)r last, Y%n&ti)n +%n&/* 'klamaC ?? 0+irst, last/ inele i&i alanndaki her !e sras ile +%n& ilevine -ve a ilev nesnesine.+%n&ti)n )bee&t/ aktarlr# 8lev bn esine ald !eleri deitirebilir -k%llanlan inele i&i +)r_ard -!n&/ inele i&i )ld%%nda/# =eiimin baka bir )l% da trans+)rm- / %n k%llanlmasdr# Tldeki ilevin kendisi ve a k)p as d!ner# 'adaki !rnee bakarsan", her +)rSea&h- / arsna ek deiken listesi k)nm%t%r, deiken +)rSea&h- / e verilen ileve aktarlr# +)rSea&h- / e aktarlan ilev d!n deeri g!"ard edilir# <rnekC BBC$@HCherbiri#&pp BB+)rSea&h- / k%llanm .in! %de -a gorithm* .in! %de -string* .in! %de -!!t"pe* .in! %de -iostream* void o(erCase(!har6 !)< !,stati!$!ast-!har*(to o(er(!))/

I void !apita ized`%tp%t(stdHHstring !onst6 str)< !har0 tmp,str!p"(ne( !harCstr.size( )+1D, str.!$str( ))/ stdHH#or$ea!h(tmp+1, tmp+str.size( ), o(erCase)/ tmpC7D,to%pper(0tmp)/ stdHH!o%t--tmp--? =/ de ete tmp/ I/ %sing namespa!e std/ int main( )< string sarrCD,<=a pha?, =B[MA`?, =!har e"?, =USLPM?, =e!ho?, =?a`_P[`P?, =go #?, =c`PSL?I/ string0 ast,sarr+sizeo#(sarr)Jsizeo#(string)/ #or$ea!h(sarr, ast, !apita ized`%tp%t)(=hepsi &%, mi et?)/ !o%t--end / ret%rn 7/ IJJJHK BBretilen ktC 'lpha $rav) Charle =elta T&h) Y)Ztr)t 7)l+ 3)tel hepsi b% millet BB 8lev nesnesi k%llanlan baka bir !rnekC BBC$@HC+%n&S)bee&t#&pp BBilev nesnesi k%llanlan !rnek .in! %de -a gorithm* .in! %de -iostream* .in! %de -!!t"pe* .in! %de -string* void o(erCase(!har6 !)< !,to o(er(!)/ I ! ass Sho(< int d$!o%nt/ p%& i!H Sho(( ) H d$!o%nt(7)/<I void operator( )(stdHHstring6 str)< stdHH#or$ea!h(str.&egin( ), str.end( ), o(erCase)/ strC7D,to%pper(strC7D)/ stdHH!o%t--++d$!o%nt--? =--str--? / =/

I int !o%nt( ) !onst< ret%rn d$!o%nt/ I I/ %sing namespa!e std/ int main( )< string sarrCD,<=a pha?, =B[MA`?, =!har e"?, =USLPM?, =e!ho?, =a`_P[`P?, =go #?, =c`PSL?I/ string0 ast,sarr+sizeo#(sarr)Jsizeo#(string)/ !o%t--#or$ea!h(sarr, ast, sho(( )).!o%nt( )--end / ret%rn 7/ IJJJHK BBretilen ktC hepsi tek satrdaC D 'lpha* E $rav)* F Charle * G =elta* H T&h)* > Y)Ztr)t* d 7)l+* ` 3)tel* ` BB <rnek bi"e a r&a, +)rSea&h- / alg)ritmasnn &)nst ve &)nst )lma an %ns%rlarla k%llanmn da g!stermitir# 8lerde er alan trans+)rm- / kalp alg)ritmasna bakarak, b%radaki +)rSea&h- / alg)ritmas ile arasnda ki +arklar in&ele ebilirsini"# +)rSea&h- / alg)ritmas e ilev ierisinde, +)rSea&h- / alg)ritmas !n&e aktarlan ilev nesnesinin kendi k)p asn )l%t%r%rken, kendi nesnesini deitirmek iin d)r%dan k%llanlama"# O an ki nesnesine g!sterge ve a da an kab%l eden ap& ilevi )lan bir !rt& -_rapper/ sn+, ve b k )laslkla )n%n e ilevlerinden biri b% s)r%n% !"er#

generate( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipiC ?? v)id generate-Y)r_ardOterat)r +irst, Y)r_ardOterat)r last, 7enerat)r generat)r/* 'klamaC

?? 0+irst, last/ inele i&i alannda ki btn !eler bir ilev ve a ilev nesnesi )lan generat)r n d!n deeri ile balatlr# =ikkat edilmesi gereken h%s%s* 7enerat)rCC)perat)r- /- / da herhangi bir deikenin verilmemi )ld%%d%r# 'adaki !rnek &ebir de i i bilinen bir !rnektir* n+D in karesi# nWn ene D+EWn eklemek gibi ani# BBC$@HC%ret#&pp BBgenerat)r- / k%llanm .in! %de -iostream* .in! %de -a gorithm* .in! %de -ve!tor* .in! %de -iterator* ! ass Vat%ra ST%ares< %nsigned d$ne(sTr/ %nsigned d$ ast/ p%& i!H Vat%ra ST%ares( ) H d$ne(sTr(7), d$ ast(7)< I %nsigned operator( )( )< ret%rn d$ne(sTr+,(d$ ast++--1)+1/ JJ-a+D/WWE..aWWE+EWa+D I I/ %sing namespa!e std/ int main( )< ve!tor-%nsigned* %v(17)/ generate(%v.&egin( ), %v.end( ), Vat%ra ST%ares( ))/ !op"(%v.&egin( ), %v.end( ), ostream$iterator-int*(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHK BBretilen ktC D G R D> EH F> GR >G `D D@@ BB

generate$n( )
$alk d)s asC

.in! %de -a gorithm* 8lev !ntipiC ?? v)id generateSn-Y)r_ardOterat)r +irst, Si"e n, 7enerat)r generat)r/* 'klamaC ?? +irst inele i&isinin iaret ettii !eden bala an n !e, ilev ve a ilev nesnesi )lan generat)r n d!n deeri ile balarlar# <rnekC BBC$@HC%retSn#&pp BBgenerateSn- / k%llanm .in! %de -iostream* .in! %de -a gorithm* .in! %de -iterator* .in! %de -ve!tor* ! ass Vat%ra ST%ares< %nsigned d$ne(sTr/ %nsigned d$ ast/ p%& i!H Vat%ra ST%ares( ) H d$ne(sTr(7), d$ ast(7)< I %nsigned operator( )( )< JJ-a+D/WWE..aWWE+EWa+D k%llan ret%rn d$ne(sTr+,(d$ ast++--1)+1/ I I/ %sing namespa!e std/ int main( )< ve!tor-%nsigned* %v(17)/ generate$n(%v.&egin( ), 9, Vat%ra ST%ares( ))/ !op"(%v.&egin( ), %v.end( ), ostream$iterator-int*(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHK BBretilen ktC D G R D> EH @ @ @ @ @ BB

in! %des( )
$alk d)s asC .in! %de -a gorithm* 8lev !ntipleriC ?? b))l in&l%des-Onp%tOterat)rD +irstD, Onp%tOterat)rD lastD, Onp%tOterat)rE +irstE, Onp%tOterat)rE lastE/ * ?? b))l in&l%des-Onp%tOterat)rD +irstD, Onp%tOterat)rD lastD, Onp%tOterat)rE +irstD, Onp%tOterat)rE lastE, C)mpare &)mp/* 'klamaC ?? 8lk !ntipC 9inele i&ilerin iaret ettii veri tipinin )perat)r4- / k%llanlarak hem 0+irstD, lastD/ hem de 0+irstE, lastE/ !elerini sra a di"er# Ter 0+irstE, lastE/ daki her !e 0+irstD, lastD/ da b%l%n%rsa ilev tr%e d!ndrr# -ikin&i alan birin&inin alt kmesidir/# ?? 8kin&i !ntipC &)mp ilev nesnesi k%llanlarak hem 0+irstD, lastD/ da ki hem de `+irstE, lastE/ da ki !eler sra a di"ilir# Ter 0+irstE, lastE/ da ki her !e 0+irstD, lastD/ da b%l%n%rsa ilev tr%e d!ndrr# -ikin&i alan birin&inin alt kmesidir#/ <rnekC BBC$@HCi&erir#&pp BBin&l%des- / k%llanmn .in! %de -iostream* .in! %de -a gorithm* .in! %de - string* ! ass CaseString< p%& i!H &oo operator( )(stdHHstring !onst6 #irst, stdHHstring !onst6 se!ond) !onst < ret%rn (+str!ase!mp(#irst.!$str( ), se!ond.!$str( )))/ I I/ %sing namespa!e std/ int main( )< string #irst1CD,<=a pha?, =&ravo?, =!har e"?, =de ta?, =e!ho?, =#o'trot?,

=go #?, =hote ?I/ string #irst1CD,<=M pha?, =&ravo?, =Char e"?, =de ta?, =S!ho?, =#o'trot?, =\o #?, =hote ?I/ string se!ondCD,<=!har e"?, =#o'trot?, =hote ?I/ %nsigned n,sizeo#(#irst1)Jsizeo#(string)/ !o%t--? )se!ond) oge eri =--(in! %des(#irst1, #irst1+n, se!ond, se!ond+5) X = = H =degi ?)--?i k dizide &% %n%rHEn? =ikin!isi #irst1 nin a t gr%&%En?/ !o%t--? )#irst1) nin oge eriH?--(in! %des(se!ond, se!ond+5, #irst1, #irst1+n) X = = H =degi ?)--?ikin!i dizide En?/ !o%t--?)se!ond) oge eriH =--(in! %des(#irst1, #irst1+n, se!ond, se!ond+5) X = = H =degi ?)--?#irst1 dizisinde En?/ !o%t--?har# &o"%t%na &akmadan karsi astirma,En? =)se!ond) oge eriH En?--(in! %des(#irst1, #irst1+n, se!ond, se!ond+5, CaseString( )) X = = H =degi ?)--?#irst1 dizisinde En? ret%rn 7/ IJJJHK BBretilen ktC ,se&)nd, )geleri ilk di"ide b%l%n%r ikin&isi +irstD nin alt gr%b%d%r ,+irstD, nin )geleri ikin&i di"ide degil ,se&)nd, )geleri +irstE di"isinde degil har+ b) %t%na bakmadan karsilastirma ,se&)nd, )geleri +ristE di"isinde degil BB

inner$prod%!t( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipleriC ?? 6 pe innerSpr)d%&t-Onp%tOterat)rD +irstD, Onp%tOterat)rD lastD, Onp%tOterat)rE +irstE, 6 pe init/* ?? 6 pe innerSpr)d%&t-Onp%tOterat)rD +irstD, Onp%tOterat)rD lastD, Onp%tOterat)rE +irstE, 6 pe init, $inar Operat)rD )pD, $inar Operat)rE )pE/*

'klamaC ?? $irin&i !ntipC 0+irstD, lastD/ !elerinin btn ikili arpmlarnn ve +irstE nin iaret ettii !eden bala arak a n sa da !elerin t)plam init e eklenir, ve b% t)plam d!ner# 8lev inele i&ilerin iaret ettii veri tipinin )perat)r+- / ve )perat)rW- / leri k%llanlr# ?? 8kin&i !ntipC Narsa lan t)plama ile&i erine binar )perat)r )pE ve binar )perat)r )pD varsa lan arpm ile&i erine k%llanlrarak %kardaki birin&i !ntipteki ilem gereklenir ve t)plam s)n% d!ner# <rnekC BBC$@HCi&S&arp#&pp BBinnerSpr)d%&t- / k%llanm .in! %de -n%meri!* .in! %de -iostream* .in! %de -string* .in! %de -iterator* .in! %de -a gorithm* !a ss Bedi< stdHHstring d$sep/ p%& i!H Bedi(stdHHstring !onst6 sep) H d$sep(sep)< I stdH.string operator( ) (stdHHstring !onst6 s1, stdHHstring !onst6 s1) !onst< ret%rn s1+d$sep+s1/ I I/ %sing namespa!e std/ int main( )< %nsigned ia1CD,<1, 1, 5, 8, 9, :, FI/ %nsigned ia1CD,<F, :, 9, 8, 5, 1, 1I/ %nsigned init,7/ !o%t--?kare er top amH =/ !op"(ia1, ia1+F, ostream$iterator-%nsigned*(!o%t, = =))/ !o%t--?dir?----inner$prod%!t(ia1, ia1+F, ia1, init)--end / !o%t--?!apraz !arpim arin tamaminin top ami?/ !op"(ia1, ia1+F, ostream$iterator-%nsigned*(!o%t, = =))/ !o%t--? ve?/ !op"(ia1, ia1+F, ostream$iterator-%nsigned*(!o%t, = =))/ !o%t--? dir?--inner$prod%!t(ia1, ia1+F, ia1, init)--end /

string names1CD,<=aar%k?, =Berim?, =>ervin?I/ string names1CD,<=Be gin?, =Bo! %?, =>e in?I/ !o%t--?isim erin &irarada istesiH =/ !op"(names1, names1+5, ostream$iterator-string*(!o%t, = =))/ !o%t--?veEn?/ !op"(names1, names1+5, ostream$iterator-string*(!o%t, = =))/ !o%t--?dirH?--inner$prod%!t(names1, names1+5, names1, string(=Et?, Bedi(=EnEt?), Bedi(= =))--end / ret%rn 7/ IJJJHK BBretilen ktC kareler t)plami D E F G H > d DG@ dir &apra" &arpimlarin tamaminin t)plami D E F G H > d ve d > H G F E D `G dir isimlerin birarada listesiC Yar%k Kerim Kervin ve $elgin K)&l% Kelin dirC Yar%k $elgin Kerim K)&l% Kervin Kelin BB

inp a!e$merge( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipleriC ?? v)id inpla&eSmergeC3']-G@/$idire&ti)nalOterat)r +irst, $idire&ti)nalOterat)r middle, $idire&ti)nalOterat)r lastC3']-GD/* ?? v)id inpla&eSmergeC3']-G@/$idire&ti)nalOterat)r +irst, $idire&ti)nalOterat)r middle, $idire&ti)nalOterat)r last, C)mpare &)mpC3']-GD/* 'klamalarC ?? 8lk !ntipC 0+irst, middle/ ve 0middle, last/ iki sral alan birbiri ile birletirilir, inele i&ilerin iaret ettii veri tiplerinin )perat)r4- / i k%llanlarak listenin sral )lmas srdrlr# S)n di"i 0+irst, last/ alannda saklanr# ?? 8kin&i !ntipC 0+irst, middle/ ve 0middle, last/ iki sral alan birbiri ile

birletirilir, iki&i -binar / karlatrma ile&i )perat)r &)mp %n d)r% ve anl b))l s)n%larn k%llanlarak listenin sral )lmas srdrlr# S)n di"iler 0+irst, last/ alannda saklanr# <rnekC BBC$@HC erindeSbirles#&pp BBinpla&eSmerge- / alg)ritma k%llanm .in! %de -iostream* .in! %de -a gorithm* .in! %de -string* .in! %de -iterator* ! ass CaseString< p%& i!H &oo operator( )(stdHHstring !onst 6#irst, stdHHstring !onst 6se!ond) !onst< ret%rn str!ase!mp(#irst.!$str( ), se!ond.!$str( ))-7 / I I/ %sing namespa!e std/ int main( )< string rangeCD,<=a pha?, =!har e"?, =e!ho?, =go #?, =&ravo?, =de ta?, =#o'trot?I/ inp a!e$merge(range, range+8, range+F)/ !op"(range, range+F, ostream$iterator-string*(!o%t, = =)/ !o%t--end / string range1CD,<=MLaM?, =CcM[LSN?, =USLPM?, =#o'trot?, =hote ?, =&ravo?, =SCc`?, =\`La?I/ inp a!e$merge(range1, range1+9, range1+d, CaseString( ))/ !op"(range1, range1+d, ostream$iterator-string*(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHK BBretilen ktC alpha brav) &harle delta e&h) +)Ztr)t g)l+ 'LY' brav) C3']LT9 =TL6' TC3O +)Ztr)t 7OLY h)tel BB

iter$s(ap( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipleriC v)id iterSs_ap-Y)r_ardOterat)rD iterD, Y)r_ardOterat)rE iterE/* 'klamaC iterD ve iterE inele i&ileri tara+ndan iaret edilen !eler takas edilir# <rnekC BBC$@HCtakas#&pp BBiterSs_ap- / alg)ritma k%llanm .in! %de -iostream* .in! %de -string* .in! %de -iterator* .in! %de -a gorithm* %sing namespa!e std/ int main( )< string #irstCD,<=a pha?, =&ravo?, =!har e"?I/ string se!ondCD,<=e!ho?, =#o'trot?, =go #?I/ %nsigned !onst n,sizeo#(#irst)Jsizeo#(string)/ !o%t--?`n!eHEn?/ !op"(#irst, #irst+n, ostream$iterator-string*(!o%t, = =))/ !o%t--end / !op"(se!ond, se!ond+n, ostream$iterator-string*(!o%t, = =))/ !o%t--end / #or(%nsigned id',7/ id'-n/ ++id')< iter$s(ap(#irst+id', se!ond+id')/ !o%t--?SonraHEn/ !op"(#irst, #irst+n, ostream$iterator-string*(!o%t, = =))/ !o%t--end / !op"(se!ond, se!ond+n, ostream$iterator-string*(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHK BBretilen ktC

On&eC alpha brav) &harle e&h) +)Ztr)t g)l+ S)nraC e&h) +)Ztr)t g)l+ alpha brav) &harle BB

e'i!ographi!a $!ompare( )
$alk d)s asC .in! %de -a gorithm* 8lev !ntipleriC ?? b))l leZi&)graphi&alS&)mpare-Onp%tOterat)rD +irstD, Onp%tOterat)rD lastD, Onp%tOterat)rE +irstE, Onp%tOterat)rE lastE/* ?? b))l leZi&)graphi&alS&)mpare-Onp%tOterat)rD +irstD, Onp%tOterat)rD lastD, Onp%tOterat)rE +irstE, Onp%tOterat)rE lastE, C)mpare &)mp/* 'klamaC ?? $irin&i !ntipC 0+irstD, lastD/ ile 0+irstE, lastE/ alanlarnn birbirlerine denk gelen !eleri karlatrlr# 8levden d)r% -tr%e/ d!nmesi iin* WW ilk alandaki ilk !e ikin&i alandaki ilk !eden kk )lmaldr# -b%n%n iin a n veri tipinin )perat)r4- / k%llanlr/ WW lastD a varlm )l%p lastE a hen" varlmam )lmaldr# $%nlarn dndaki her d%r%mda ilevden anl - ani +alse/ d!ner# $%n%n anlam ilk di"i a"m )larak ikin&i di"iden kk deil demektir# 8levden anl -+alse/ d!nmesi iinC WW ilk alandaki ilk !e ikin&i alandaki ilk !eden b ktr# -karlatrmak iin a n veri tipinin )perat)r4- / k%llanlr/# WW lastE a varlm )l%p eer lastD a hen" varlmamsa# WW lastD ve lastE a varlmsa# ?? 8kin&i !ntipC $% ilevde inele i&ilerin iaret ettii !elere )perat)r4- / erine iki&i karlatrma -binar &)mparis)n/ ilemi gereklenir# <rnekC BBC$@HC a"Skarsila#&pp

BBleZi&)graphi&alS&)mpare- / k%llanm .in! %de -a gorithm* .in! %de -iterator* .in! %de -iostream* .in! %de -string* ! ass CaseString< p%& i!H &oo operator( )(stdHHstring !onst 6#irst, stdHHstring !ost 6se!ond) !onst< ret%rn str!ase!mp(#irst.!$str( ), se!ond.!$str( ))-7/ I I/ %sing namespa!e std/ int main ( )< string (ord1,?he o?/ string (ord1,?he p?/ !o%t--(ord1--? is =-( e'i!ographi!a $!ompare((ord1.&egin( ), (ord1.end( ), (ord1.&egin( ), (ord1.end( )) X =&e#ore? H =&e"ond or at?)--(ord1--?in the a pha&etEn?/ !o%t--(ord1--? is =-( e'i!ographi!a $!ompare((ord1.&egin( ), (ord1.end( ), (ord1.&egin( ), (ord1.end( )) X =&e#ore? H =&e"ond or at?)--(ord1--?in the a pha&etEn?/ !o%t--(ord1--? is =-( e'i!ographi!a $!ompare((ord1.&egin( ), (ord1.end( ), (ord1.&egin( ), (ord1.end( )) X =&e#ore? H =&e"ond or at?)--(ord1--? in the a pha&etEn?/ string &irCD,<=a pha?, =&ravo?, =!har e"?I/ string ikiCD,<=ML>cM?, =B[MA`?, =USLPM?I/ !op"(&ir, &ir+5, ostream$iterator-string*(!o%t, = =))/ !o%t--? is ordered?--( e'i!ographi!a $!ompare(&ir, &ir+5, iki, iki+5, CaseString( )) X =&e#ore?

H =&e"ond or at?)/ !op"(iki, iki+5, ostream$iterator-string*(!o%t, = =))/ !o%t--end --har# &o"%t%na &akmadan karsi astirma k% ani di.En?/ ret%rn 7/ IJJJHK BBretilen ktC hell) is be+)re help in the alphabet hell) is be )nd )r at hell) in the alphabet help is be )nd )r at hell) in the alphabet alpha brav) &harle is )rdered be+)re 'LK3' $]'NO =TL6' har+ b) %t%na bakmadan karsilastirma k%llanildi BB

o(er$&o%nd( )
$alk d)s asC .in! %de -a gorithm* 8lev !ntipleriC ?? Y)r_ardOterat)r l)_erSb)%nd-Y)r_ardOterat)r +irst, Y)r_ardOterat)r last, &)nst 6 peV val%e/* ?? Y)r_ardOterat)r l)_erSb)%nd-Y)r_ardOterat)r +irst, Y)r_ardOterat)r last, &)nst 6 peV val%e, C)mpare &)mp/* 'klamalarC ?? $irin&i !ntipC 0+irst, last/ inele i&i alanndaki sral !eler de, val%e den kk )lma an - ani b k ve a eit/ ilk !e aranp b%l%n%r# =!nen inele i&i sralama b)"madan di"i e val%e i erletire&ek eri iaret eder# 9inele i&ilerle birlikte a n veri tipinin )perat)r4- / ile&i k%llanlr# $! le bir !e b%l%nma"sa ) "aman last d!ner# ?? 8kin&i !ntipC 0+irst, last/ inele i&i alann&a iaret edilen !eler m%tlaka &)mp ilevin&e -?)bee&t/ sra a di"ilmi )lmaldr# 'landaki her !e &)mp ilevi k%llanlarak val%e ile karlatrlr# 8ki&i klem -binar predi&ate/ &)mp iin ilk !enin inele i&isi val%e ve alandaki !elere % g%lanr, anl -+alse/ d!ndren d!ner# $! le bir !e b%l%nma"sa last d!ner# <rnekC

BBC$@HCaltSsinir#&pp BBl)_erSb)%nd- / !rnei .in! %de -a gorithm* .in! %de -iostream* .in! %de -iterator* .in! %de -#%n!tiona * %sing namespa!e std/ int main( )< int iaCD,<17, 17, 57I/ !o%t--?SeT%en!eH =/ !op"(ia, ia+5, ostream$iterator-int*(!o%t, = =))/ !o%t--end / !o%t--?19 !an &e inserted &e#ore =--0 o(er$&o%nd(ia, ia+5, 19) --end / !o%t--?59 !an &e inserted a#ter =-o(er$&o%nd(ia, ia+5, 59),,ia+5 X =the ast e ement? H =XXXX?)--end / iter$s(ap(ia, ia+1)/ !o%t--?SeT%en!eH =/ !op"(ia, ia+5, ostream$iterator-int*(!o%t, = =))/ !o%t--end / !o%t--?19 !an &e inserted &e#ore =-0 o(er$&o%nd(ia, ia+5, 19, greater-int*( ))--end / !o%t--?59 !an &e inserted &e#ore =-( o(er$&o%nd(ia, ia+5, 59, greater-int*( )),,ia X =the #irst e ement? H =XXXX?)--end / ret%rn 7/ IJJJHKK BBretilen ktC Seg%en&eC D@ E@ F@ DH &an be inserted be+)re E@ FH &an be inserted a+ter the last element Seg%en&eC F@ E@ D@ DH &an be inserted be+)re D@ FH &an be inserted be+)re the +irst element BB

ma'( )
$alk d)s asC .in! %de -a gorithm* 8lev !ntipleriC ?? 6 pe &)nstV maZ-6 pe &)nstV )ne, 6 pe &)nstV t_)/* ?? 6 pe &)nstV maZ-6 pe &)nstV )ne, 6 pe &)nstV t_), C)mparat)r &)mp/* 'klamalarC ?? $irin&i !ntipC )ne ve t_) !elerinden daha b k )lan d!ner# $%rada a n veri tiplerinin )perat)r5- / ile&i k%llanlr# ?? 8kin&i !ntipC Ter iki&i klem -binar predi&ate/ &)mp-)ne, t_)/ d)r% -tr%e/ retirse )ne d!ner, aksi d%r%mda t_) d!ner# <rnekC BBC$@HCk)&aman#&pp BBmaZ- / k%llanm .in! %de -iostream* .in! %de -a gorithm* .in! %de -string* ! ass CaseString< p%& i!H &oo operator( )(stdHHstring !onst6 #irst, stdHHstring !onst6 se!ond) !onst< ret%rn (str!ase!mp(se!ond.!$str( ), #irst.!$str( ))*7)/ I I/ %sing namespa!e std/ int main( )< !o%t--?Rord) =--ma'(string(=#irst?), string(=se!ond?))-=) is e'i!ographi!a " astEn?/ !o%t--?Rord) =--ma'(string(=#irst?), string(=SSC`VU?))-=) is e'i!ographi!a " astEn?/ !o%t--?Rord) =--ma'(string(=#irst?), string(=SSC`VU?), CaseString( ))--?) is e'i!ographi!a " astEn?/ ret%rn 7/ IJJJKK

BBretilen ktC b)rd ,se&)nd, is leZi&)graphi&all last b)rd ,+irst, is leZi&)graphi&all last b)rd ,STCOA=, is leZi&)graphi&all last BB

ma'$e ement( )
$alk d)s asC .in! %de -a gorithm* 8lev !ntipleriC ?? Y)r_ardOterat)r maZSelement-Y)r_ardOterat)r +irst, Y)r_ardOterat)r last/* ?? Y)r_ardOterat)r maZSelement-Y)r_ardOterat)r +irst, Y)r_ardOterat)r last, C)mparat)r &)mp/* 'klamalarC ?? $irin&i !ntipC 0+irst, last/ alanndaki en b k !e i iaret eden inele i&i d!ner# 9inele i&i i belirlemek iin a n veri tipinin )perat)r4- / ile&i k%llanlr# ?? 8kin&i !ntipC $% ilevde )perat)r4- / erine iki&i klem -binar predi&ate/ &)mp k%llanlarak !eler karlatrlr# <teki !elerle karlatrlrken &)mp iin d!nen !e )%nl%kla d)r% -tr%e/ )l%p ! le d!ner# <rnekC BBC$@HCk)&aS)ge#&pp BBmaZSelement- / k%llanm .in! %de -iostream* .in! %de -a gorithm* ! ass M&sAa %e< p%& i!H &oo operator( )(int #irst, int se!ond) !onst< ret%rn a&s(#irst)-a&s(se!ond)/ I I/

%sing namespa!e std/ int main( )< int iaCD,<48, F, 41, 17, 411I/ !o%t--?Phe ma' int va %e is =--0ma'$e ement(ia, ia+9)--end / !o%t--?Phe ma' a&so %t int va %e is =-0ma'$e ement(ia, ia+9, M&sAa %e( ))--end / ret%rn 7/ IJJJHKK BBretilen ktC 6he maZ int val%e is D@ 6he maZ abs)l%te int val%e is ?DE BB

merge( )
$alk d)s asC .in! %de -a gorithm* 8lev !ntipleriC ?? O%tp%tOterat)r merge-Onp%tOterat)rD +irstD, Onp%tOterat)r lastD, Onp%tOterat)rE +irstE, Onp%tOterat)rE lastE, O%tp%tOterat)r res%lt/* ?? O%tp%tOterat)r merge-Onp%tOterat)rD +irstD, Onp%tOterat)rD lastD, Onp%tOterat)rE +irstE, Onp%tOterat)rE lastE, O%tp%tOterat)r res%lt, C)mpare &)mp/* 'klamalarC ?? $irin&i !ntipC 0+irstD, lastD/ ve 0+irstE, lastE/ iki -sral/ alan ine sral biimde birara a getirilir# -sralama salamak iin a n verinin )perat)r4- / ile&i k%llanlr/# S)n di"i res%lt tan balar ve ilevin d!ndrd O%tp%tOterat)r den hemen !n&e biter# ?? 8kin&i !ntipC $%rada da a n birletirme ilemi gereklenir, ama b% ilem esnasnda iki&i karlatr& -binar &)mparis)n/ &)mp sralama ama& ile k%llanlr# <rnekC BBC$@HCbiles#&pp BBmerge- / k%llanm .in! %de -a gorithm* .in! %de -iostream*

.in! %de -string* .in! %de -iterator* ! ass CaseString< p%& i!H &oo operator( )(stdHHstring !onst6 #irst, stdHHstring !onst6se!ond) !onst< ret%rn (str!ase!mp(#irst.!$str( ), se!ond.!$str( ))-7)/ I I/ %sing namespa!e std/ int main( )< string range1CD,<=a pha?, =&ravo?, =#o'trot?, =hote ?, =z% %?I/ string range1CD,<=e!ho?, =de ta?, =go #?, =romeo?I/ string res% tC9+8D/ !op"(res% t, merge(range1, range1+9, range1, range1+8, res% t), ostream$iterator-string*(!o%t, = =))/ !o%t--end / string range5CD,<=ML>cM?, =&ravo?, =#o'trot?, =c`PSL?, =bWLW?I/ string range8CD,<=de ta?, =SCc`?, =\`La?, =romeo?I/ !op"(res% t, merge(range5, range5+9, range8, range8+8, res% t, CaseString( )), ostream$iterator-string*(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHKK JBretilen ktC alpha brav) e&h) delta +)Ztr)t g)l+ h)tel r)me) "%l% 'LK3' brav) delta TC3O +)Ztr)t 7OLY 3O6TL r)me) :ULU BB

min( )
Ba2 3k dos"as3H ^in&l%de 4alg)rithm5 8lev !ntipleriC ?? 6 pe &)nstV min-6 pe &)nstV )ne, 6 pe &)nstV t_)/* ?? 6 pe &)nstV min-6 pe &)nstV )ne, 6 pe &)nstV t_),

C)mparat)r &)mp/* 'klamalarC ?? $irin&i !ntipC 9inele i&ilerin iaret ettii ve a n veri tipinin )perat)r4- / ile&i k%llanlarak )ne ve t_) dan dahak kk )lan d!ner# ?? 8kin&i !ntipC &)mp-)ne, t_)/ +alse d!ndrrse, ikin&i !ntipten )ne d!ner, aksi taktirde t_) d!ner# rnekH BBC$@HCk%&%k#&pp BBmin- / k%llanm .in! %de -a gorithm* .in! %de -string* .in! %de -iostream* ! ass CaseString< p%& i!H &oo operator( )(stdHHstring !onst6 #irst, stdHHstring !onst6 se!ond) !onst< ret%rn (str!ase!mp(se!ond.!$str( ), #irst.!$str( ))*7)/ I I/ %sing namespa!e std/ int main( )< !o%t--?Be ime ) =--min(string(=#irst?), string(=se!ond?))-= ) e'i!ographi!a o arak i ktirEn? / !o%t--?Be ime ) =--min(string(=#irst?), string(=SSC`VU?))-= ) e'i!ographi!a o arak i ktirEn? / !o%t--?Be ime ) ?--min(string(=#irst?), string(SSC`VU?), CaseString( ))--? ) e'i!ographi!a o arak i ktirEn?/ ret%rn 7/ IJJJHK BB;retilen ktC Kelime ,+irst, leZi&)graphi&al )larak ilktir# Kelime ,STCOA=, leZi&)graphi&al )larak ilktir# Kelime ,+irst, leZi&)graphi&al )larak ilktir# BB

min$e ement( )

$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipleriC ?? Y)r_ardOterat)r minSelement-Y)r_ardOterat)r +irst, Y)r_ardOterat)r last/* ?? Y)r_ardOterat)r minSelement-Y)r_ardOterat)r +irst, Y)r_ardOterat)r last, C)mparat)r &)mp/* 'klamalar ?? $irin&i !ntipC 0+irst, last/ alanndaki en kk !e i iaret eden inele i&i d!ner# Neri tipinin )perat)r4- / ilevi inele i&i tara+ndan iaret edilir# ?? 8kin&i !ntipC $%rada )perat)r4- / ilevinden "i ade, &)mp karlatr&s k%llanlarak 0+irst, last/ inele i&i alanndaki !eler karlatrlr# C)mp ile d!nen !e )% ke" +alse - anl/ d!ndrr# <rnekC BBC$@HCmineleman#&pp BBkk eleman b%lmak .in! %de -iostream* .in! %de -a gorithm* ! ass M&sAa %e< p%& i!H &oo operator( )(int #irst, int se!ond) !onst< ret%rn a&s(#irst)-a&s(se!ond) / I I/ %sing namespa!e std/ int main( )< int iaCD,<48, F, 41, 17, 411I/ !o%t--?Sn k%!%k int degerH =--0min$e ement(ia, ia+9)--end / !o%t--?M%t ak degeri en k%!%k int H =-0min$e ement(ia, ia+9, M&sAa %e( ))--end / ret%rn 7/ IBBBCJ BBretilen ktC Tn k%&%k int degerC ?DE U%tlak degeri en k%&%k intC?E

BB

mismat!h( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipleriC ?? pair4Onp%tOterat)rD, Onp%tOterat)rE5 mismat&h-Onp%tOterat)r +irstD, Onp%tOterat)rD lastD, Onp%tOterat)rE +irstE/ * ?? pair4Onp%tOterat)rD, Onp%tOterat)rE5 mismat&h-Onp%tOterat)r +irstD, Onp%tOterat)rD lastD, Onp%tOterat)rE +irstE, C)mpare &)mp/* 'klamalarC ?$irin&i !ntipC 9inele i&inin iaret ettii veri tipinin !"delik ile&i k%llanlarak, iki di"inin !eleri +irstD ve +irstE dan bala arak karlatrlr# Karlatrlan !eler +arkl )ld%klarnda ve a, lastD !esine %laldnda karlatrma ilemi d%r%r# 8kin&i di"i birin&iden daha +a"la !e e sahip )labilir# Ter ikin&i di"i birin&iden daha a" !e e sahip )l%rsa, ) "aman alg)ritmann davran belirleneme"# ?8kin&i !ntipC $%rada )perat)r..- / erine &)mp tara+ndan tanmlanan iki&i -binar / karlatrma k%llanlarak iki di"inin !eleri +irstD ve +irstE den bala arak karlatrlr# Karlatrma ilemi, &)mp anl -+alse/ d!ndrdnde ve a lastD !esine %laldnda d%r%r# S)n erleri iaret eden inele i&ileri ieren bir pair d!ner# 8kin&i di"i birin&i e g!re daha +a"la !e e sahip )labilir# Ter ikin&i di"i birin&iden daha a" !e e sahip )l%rsa, ) "aman alg)ritmann davran belirleneme"# <rnekC BBC$@HC% ma"#&pp BBmismat&h alg)ritma k%llanm .in! %de -a gorithm* .in! %de -string* .in! %de -%ti it"* .in! %de -iostream* ! ass CaseString< p%& i!H

&oo operator( )(stdHHstring !onst6 #irst, stdHHstring !onst6 se!ond) !onst< ret%rn str!ase!mp(#irst.!$str( ), se!ond.!$str( )),,7/ I I/ %sing namespa!e std/ int main( )< string range1CD,<=a pha?, =&ravo?, =#o'trot?, =hote ?, =z% %?I/ string range1CD,<=a pha?, =&ravo?, =#o'trot?, =cote ?, =z% %?I/ pair-string0, string0* pss,mismat!h(range1, range1+9, range1)/ !o%t--?Phe e ements?--0pss.#irst--? and =--0pss.se!ond-=at o##set?--(pss.#irst4range1)--? di##erEn?/ i#(mismat!h(range1, range1+9, range1, CaseString( )).#irst,, range+9) !o%t--?Rhen !ompared !ase insensitive " the" mat!hEn? / ret%rn 7/ IJJJHK BBretilen ktC 6he elements h)tel and 3)tel at )++set F di++er bhen &)mpared &ase insensitivel the mat&h BB

ne't$perm%tation( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipleriC ?? b))l neZtSperm%tati)n-$idire&ti)nalOterat)r +irst, $idire&ti)nalOterat)r last/* ?? b))l neZtSperm%tati)n-$idire&ti)nalOterat)r +irst, $idire&ti)nalOterat)r last, C)mp &)mp/* 'klamaC ??$irin&i !ntipC 0+irst, last/ alannda er alan !eler di"isinin bir s)nraki permtas )n% -neZtSperm%tati)n- // hesaplanr# <rnek )larak )larak !eleri D, E, F )lan di"ide neZtSperm%tati)n- / arldnda*

DEF DFE EDF EFD FDE FED <rnekten g!rdn" gibi, bir s)nraki deer !n&ekine g!re m%tlak deer )larak daha b ktr# -DFE DEF ten, EDF DFE den vd## b ktr/ $%rada inele i&inin iaret ettii veri tipinin )perat)r4- / ile&i k%llanlmtr# <eler sralamasnda eniden bir d"enleme aplmsa ) "aman d)r% -tr%e/ deer d!ner# 9eniden bir d"enleme aplmadnda ise anl -+alse/ d!ner# $% d%r%m en s)n !enin en b k )ld%%n% g!sterir# $%na ben"er d"enlemeler )perat)r4- / ile&i de k%llanlarak aplabilir# 8kin&i !ntipC 0+irst, last/ alannda er alan !eler di"isinin bir s)nraki permtas )n% -neZtSperm%tati)n- // hesaplanr# 'landa er alan !eler eniden d"enlenir# 9eniden d"enleme aplmsa d)r% -tr%e/ deer d!ner, )k eer eniden d"enleme aplmamsa anl -+alse/ d!ner# $%n%n baka bir anlam da di"i d"eninin d)r% )larak tamamlanddr# $%rada !eleri karlatrmak iin iki&i -binar / kstas &)mp k%llanlr# <rnekC BBC$@HCbirs)nraki#&pp BBneZtSperm%tati)n alg)ritmasnn k%llanm .in! %de -a gorithm* .in! %de -iostream* .in! %de -string* .in! %de -iterator* ! ass CaseString< p%& i!H &oo operator( )(stdHHstring !onst6 #irst, stdHHstring !onst6 ast) !onst< ret%rn str!ase!ompare(#irst.!$str( ), se!ond.!$str( ))-7 / I I/ %sing namespa!e std/ int main( )<

string saintsCD,<=`h?, =(hen?, =the?, =saints?I/ !o%t--??oh (hen the saints? in &tn perm%tas"on ariH En =/ !o%t--?Uizi erHEn?/ do< !op"(saints, saints+8, ostream$iterator-string*(!o%t, = =))/ !o%t--end / I (hi e(ne't$perm%tation(saints, saints+8, CaseString( )))/ !o%t--?i k sira amadan sonraki diziHEn?/ sort(saints, saints+8, CaseString( ))/ !o%t--?Uizi erHEn ?/ do< !op"(saints, saints+8, ostream$iterator-string*(!o%t, = =))/ !o%t--end / I (hi e(ne't$perm%tation(saints, saints+8, CaseString( )))/ ret%rn 7/ IJJJHK BBretilen ktC -bir ksm verildi/ X)h _hen the saints[ in btn permtas )nlarC =i"ilerC Oh _hen the saints saints Oh the _hen saints Oh _hen the saints the Oh _hen ### ilk siralamadan s)nraki di"iC =i"ilerC Oh saints the _hen Oh saints _hen the Oh the saints _hen Oh the _hen saints ### BB

nth$e ement( )

$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipleriC ?? v)id nSth elementC3']-G@/]and)m'&&essOterat)r +irst, ]and)m'&&essOterat)r nth, ]and)m'&&essOterat)r lastC3']-GD/* ?? v)id nSth elementC3']-G@/]and)m'&&essOterat)r +irst, ]and)m'&&essOterat)r nth, ]and)m'&&essOterat)r last, C)mpare &)mpC3']-GD/* 'klamalarC ??$irin&i !ntipC 0ilk-+irst/, s)n-last// alanndaki btn !eler n in iaret ettii !e e g!re sralama a k)n%r# 0s)l-le+t/, nth/ alanndaki btn !eler n nin iaret ettii !eden daha kktr# 0nth+D, s)n-last// alanndaki btn !eler n nin iaret ettii !eden daha b ktr# 8ki alt kmenin kendileri sralama a k)nma"# 9inele i&inin iaret ettii veri tipinin )perat)r4- / ile&i k%llanlr# ?? 8kin&i !ntipC 0ilk-+irst/, s)n-last// alanndaki btn !eler n in iaret ettii !e e g!re sralama a k)n%r# 0s)l-le+t/, nth/ alanndaki btn !eler n nin iaret ettii !eden daha kktr# 0nth+D, s)n-last// alanndaki btn !eler n nin iaret ettii !eden daha b ktr# 8ki alt kmenin kendileri sralama a k)nma"# <eleri karlatrmak iin &)mp ilev nesnesi k%llanlr# <rnekC BBC$@HCnin&i#&pp BBnthSelement alg)ritmasnn k%llanm .in! %de -iostream* .in! %de -a gorithm* .in! %de -#%n!tiona * .in! %de -iterator* %sing namespa!e std/ int main( )< int iaCD,<1, 5, 9, F, e, 1, 8, :, d, 17I/ !o%t--iaC5D--?e gore dizi me?--end / !op"(ia, ia+17, ostream$iterator-int*(!o%t, = =))/ !o%t--end / nt$e ement(ia, ia+9, ia+17, greater-int*( ))/ !o%t--iaC9D--?e gore dizi me?--end /

!op"(ia, ia+17, ostream$iterator-int*(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJH BBretilen ktC G e g)re di"ilme D E F G R d H > ` D@ H e g)re di"ilme D@ ` d R > H F G E D BB

partia $sort( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipleriC ?? v)id partialSs)rtC3']-G@/]and)m'&&essOterat)r +irst, ]and)m'&&essOterat)r middle, ]and)m'&&essOterat)r lastC3']-GD/* ?? v)id partialSs)rtC3']-G@/]and)m'&&essOterat)r +irst, ]and)m'&&essOterat)r middle, ]and)m'&&essOterat)r last, C)mpare &)mpC3']-GD/* 'klamalar ??$irin&i !ntipC 9inele i&inin iaret ettii veri tipinin )perat)r4- / ile&i k%llanlarak, )rta -middle/? ilk -+irst/ en kk !eleri sralanarak 0ilk -+irst/, )rta -middle// alannda saklanr# Serilerin geri kalan !eleri sralanmadan kalr ve 0)rta -middle/, s)n -last// alannda saklanr# ?? 8kin&i !ntipC Salanan iki&i -binar / kstas &)mp k%llanlarak )rta -middle/ ?ilk -+irst/ en kk !eleri sralanarak 0ilk -+irst/, )rta -middle// alannda saklanr# Serilerin geri kalan !eleri srlanmadan kalr# <rnekC BBC$@HCparsra#&pp BBpartialSs)rt- / alg)ritmasnn k%llanm .in! %de -iostream* .in! %de -a gorithm*

.in! %de -#%n!tiona * .in! %de -iterator* %sing namespa!e std/ int main( )< int iaCD,<1, 5, 9, F, e, 1, 8, :, d, 17I/ partia $sort(ia, ia+5, ia+17)/ !o%t--?5 en k%!%k oge"i &% H En?/ !op"(ia, ia+17, ostream$iterator-int*(!o%t, = =))/ !o%t--end / !o%t--?9 en &%"%k oge"i &% H En?/ partia $sort(ia, ia+9, ia+17, greater-int*( ))/ !o%t--end / ret%rn 7/ IJJJHK BBretilen ktC F en k%&%k )ge i b%lC D E F d R H G > ` D@ H en b% %k )ge i b%lC D@ R ` d > D E F G H BB

partia $sort$!op"( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipleriC ?? v)id partialSs)rtS&)p C3']-G@/Onp%tOterat)r +irst, Onp%tOterat)r last, ]and)m'&&essOterat)r destS+irst, ]and)m'&&essOterat)r destSlastC3']-GD/ * ?? v)id partialSs)rtS&)p C3']-G@/Onp%tOterat)r +irst, Onp%tOterat)r last, ]and)m'&&essOterat)r destS+irst, ]and)m'&&essOterat)r destSlast, C)mpare &)mpC3']-GD/* 'klamalarC ?? $irin&i !ntipC 9inele i&inin iaret ettii veri tipinin )perat)r4- / ile&i k%llanlarak 0ilk -+irst/, s)n -last// alanndaki en kk !eler 0destS+irst, destSlast/ alanna k)p alanr# Sade&e daha kk deerler ikin&i alana

k)p alanr# ?? 8kin&i !ntipC 8ki&i -binar / kstas &)mp k%llanlarak 0ilk -+irst/, s)n -last// alanndaki !eler sra a di"ilirler# Kstas &)mp %n d)r% -tr%e/ deer d!ndrd !eler, 0destS+irst, destSlast/ alanna k)p alanr# Sade&e daha kk deerli !eler ikin&i alana k)p alanr# <rnekC BBC$@HCkdi"ilikp #&pp BBpartialSs)rtS&)p - / alg)ritma !rnei .in! %de -iostream* .in! %de -a gorithm* .in! %de -#%n!tiona * .in! %de -iterator* %sing namespa!e std/ int main( )< int iaCD,<1, 17, 5, d, 9, :, F, 8, e, 1I/ int ia1C:D / partia $sort$!op"(ia, ia+17, ia1, ia1+:)/ !op"(ia, ia+17, ostream$iterator-int*(!o%t, = = ))/ !o%t--end / !o%t--?Sn k%!%k : ogeH ? / !op"(ia1, ia1+:, ostream$iterator-int*(!o%t, = =))/ !o%t--end / !o%t--?Uaha &%"%k a ana en k%!%k 8 ogeH En= / partia $sort$!op"(ia, ia+8, ia1, ia1+:) / !op"(ia1, ia1+:, ostream$iterator-int*(!o%t, = =))/ !o%t--end / !o%t--?Uaha &%"%k a ana 8 en &%"%k ogeH En?/ partia $sort$!op"(ia, ia+8, ia1, ia1+:, greater-int*( ))/ !op"(ia1, ia1+:, ostream$iterator-int*(!o%t, = =))/ !o%t--end / ret%rn 7/ IBBBCJ BBretilen ktC D D@ F ` H > d G R E Tn k%&%k > )geC D E F G H > =aha b% %k alana en k%&%k G )geC D F ` D@ H > =aha b% %k alana G en b% %k )geC

D@ ` F D H > BB

partia $s%m( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipleriC ?? O%tp%tOterat)r partialSs%m-Onp%tOterat)r +irst, Onp%tOterat)r last, O%tp%tOterat)r res%lt/ * ?? O%tp%tOterat)r partialSs%m-Onp%tOterat)r +irst, Onp%tOterat)r last, O%tp%tOterat)r res%lt, $inar Operati)n )p/* 'klamalarC ?? $irin&i !ntipC 0res%lt, 4d!nen O%tp%tOterat)r5/ alanndaki her !enin deeri 0+irst, last/ alannda denk gelen alandaki !eleri ekle erek elde edilir# Aeti&e alanndaki ilk !e +irst tara+ndan iaret edilen !e e eittir# ?? 8kin&i !ntipC 8ki&i -binar / ile )p, 0res%lt, 4d!nen O%tp%tOterat)r5/ alanndaki her !enin deerini elde etmek iin, neti&e alanndaki !n&eki !e ile, 0+irst, last/ alanndaki denk gelen !e e % g%lanr# Aeti&e alanndaki ilk !e +irst tara+ndan iaret edilen !e e eittir# <rnekC BBC$@HCkt)plama#&pp BBpartialSs%m- / alg)ritma !rnei .in! %de -iostream* .in! %de -a gorithm* .in! %de -#%n!tiona * .in! %de -n%meri!* .in! %de -iterator* %sing namespa!e std/ int main( )< int iaCD,<1, 1, 5, 8, 9I/ int ia1C9D/ !op"(ia1, partia $s%m(ia, ia+9, ia1), ostream$iterator-int*(!o%t, = =))/

!o%t--end / !op"(ia1, partia $s%m(ia, ia+9, ia1, m% tip ies-int*( )), ostream$iterator-int*(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHK BBretilen ktC D F > D@ DH D E > EG DE@ BB

partition( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipleriC ?? $idire&ti)nalOterat)r partiti)n-$idire&ti)nalOterat)r +irst, $idire&ti)nalOterat)r last, Unar Kredi&at pred/* 'klamaC ?? pred tara+ndan d)r% -tr%e/ )larak saptanm )lan 0+irst, last/ alanndaki btn !eler anl -+alse/ )larak saptanm !elerden !n&e erletirilir# =!n deeri, pred tara+ndan d)r% -tr%e/ )larak b!lmelenmi )lan alandaki s)n !eden hemen s)nrasn iaret eder# <rnekC BBC$@HCpar&ala#&pp BBpartiti)n- / alg)ritma !rnei .in! %de -iostream* .in! %de -string* .in! %de -a gorithm* .in! %de -iterator* ! ass LessPhan< int d$'/ p%& i!H LessPhan(int ') H d$'( )<I

&oo operator( )(int va %e)< ret%rn va %e-,d$'/ I I/ %sing namespa!e std/ int main( )< int iaC D,<1, 5, 9, F, e, 17, 1, d, :, 8I/ int0 sp it/ sp it,partition(ia, ia+17, LessPhan(iaCeD))/ !o%t--?son oge -,8 iaC=--sp it4ia41--?D dir. En?/ !op"(ia, ia+17, ostream$iterator-int*(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHK BBretilen ktC s)n )ge 4. G ia0F1 dir# D, F, G, E, R, D@, d, `, >, H BB

prev$perm%tation( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipleriC ?? b))l prevSperm%tati)n-$idire&ti)nalOterat)r +irst, $idire&ti)nalOterat)r last/* ?? b))l prevSperm%tati)n-$idire&ti)nalOterat)r +irst, $idire&ti)nalOterat)r last, C)mp &)mp/* 'klamalarC ?? $irin&i !ntipC 0+irst, last/ alanndaki !eler di"isinin verilen !n&eki permtas )n%n% belirler# 'landaki !eler, daha !n&e aplan d"enlemede elde edilen daha kk !eler di"iliinin tersine -bakn" neZtSperm%tati)n- // sralanr# 9eniden d"enlenirse, d)r% -tr%e/ deeri d!ner# 9)k eer eniden d"enleme )lma"sa, ) "aman anl -+alse/ deeri d!ner# S)n d%r%m, inele i&ilerin iaret ettii veri tipinin )perat)r4- / ile&ine g!re, di"i "aten istenen sralamada verilmi demektir#

?? 8kin&i !ntipC 0+irst, last/ alanndaki !eler di"isinin verilen !n&eki permtas )n%n% belirler# 'landaki !eler eniden d"enlenir# 9eniden d"enleme )l%rsa, ) "aman d)r% -tr%e/ deer d!ner# 9)k eer eniden d"enleme )lma"sa, ) "aman anl -+alse/ deeri d!ner# S)n d%r%mda, iki&i -binar / kstas &)mp iki !e i karlatrmak iin k%llanlr, ve b%na g!re di"i "aten istenen sralamada verilmi demektir# <rnekC BBC$@HC)nperm#&pp BBprevSperm%tati)n- / alg)ritma k%llanm .in! %de -iostream* .in! %de -string* .in! %de -iterator* .in! %de -a gorithm* ! ass CaseString< p%& i!H &oo operator( )(stdHHstring !onst6 #irst, stdHHstring !onst6 se!ond) !onst < ret%rn str!ase!mp(#irst.!$str( ), se!ond.!$str( ))-7/ I I/ %sing namespa!e std/ int main( )< string izmirCD,<=`##?, =&% %nmaz?, =&ir? =daha?I/ !o%t--? )`## &% %nmaz &ir daha) nin evve ki perm%tas"on ariHEn?/ !o%t--?Uizi erHEn?/ do< !op"(izmir, izmir+8, ostream$iterator-string*(!o%t, = =))/ !o%t--end / I (hi e(prev$perm%tation(izmir, izmir+8, CaseString( )))/ !o%t--?Uizinin i k sira ama sonrasiHEn/ sort(izmir, izmir+8, CaseString( ))/ !o%t--?Uizi erHEn?/ (hi e(prev$perm%tation(izmir, izmir+8, CaseString( )))< !op"(izmir, izmir+8, ostream$iterator-string*(!o%t, = =))/ !o%t--end / I

!o%t--?daha prev$perm%tation "okEn?/ ret%rn 7/ IJJJHK BBretilen ktC ,O++ b%l%nma" bir daha, nin evvelki perm%tas )nlariC =i"ilerC O++ b%l%nma" bir daha O++ b%l%nma" daha bir O++ bir b%l%nma" daha O++ bir daha b%l%nma" O++ daha b%l%nma" bir O++ daha bir b%l%nma" =i"inin ilk siralama s)nrasiC =i"ilerC daha prevSperm%tati)n )k BB

random$sh%## e( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipleriC ?? v)id rand)mSsh%++le-]and)m'&&essOterat)r +irst, ]and)m'&&essOterat)r last/* ?? v)id rand)mSsh%++leC3']-G@/]and)m'&&essOterat)r +irst, ]and)m'&&essOterat)r last, ]and)mA%mber7enerat)r randC3']-GD/* 'klamalarC $irin&i !ntipC 0+irst, last/ alanndaki !eler eniden rastgele sralanrlar# 8kin&i !ntipC 0+irst, last/ alanndaki !eler rand rastgele sa rete&i k%llanlarak eniden sralanr# $% 0@, kalan -remaining// alannda bir int d!ndrr, kalan ani remaining ise rand ilev nesnesinin )perat)r- /- / ne deiken )larak aktarlr# $aka bir seenekte* rastgele sa rete&i, int remaining deikeni bekle en ve 0@, remaining/ alannda rastgele bir int deer d!ndren ilev )larakta alnabilir# 8lev nesnesi k%llanld "aman, b% nesne an)nim nesne )lama"#

<rnekC BBC$@HCrastgele#&pp BBrand)mSsh%++le- / alg)ritma k%llanm .in! %de -iostream* .in! %de -a gorithm* .in! %de -!time* .in! %de -string* .in! %de -iterator* int randomAa %e(int remaining)< ret%rn stati!$!ast-int*( ((7.7+remaining)0rand( ))J([MVU$MM_+1.7) )/ I ! ass [andom\enerator< p%& i!H [andom\enerator( )< srand(time(7))/ I int operator( )(int remaining) !onst< ret%rn randomAa %e(remaining) / I I/ void sho((stdHHstring0 &egin, stdHHstring0 end)< stdHH!op"(&egin, end, stdHHostream$iterator-stdHHstring*(stdHH!o%t, = =))/ stdHH!o%t--stdHHend --stdHHend / I %sing namespa!e std/ int main( )< string (ordsCD,<=se ami?, =kami ?, =t%rkan?, =!evat?, =i kan?, =dam a?I/ %nsigned !onst size,sizeo#((ords)Jsizeo#(string) / !o%t--?Aarsa"i an rastge e"i k% anHEn?/ random$sh%## e((ords, (ords+size)/ sho(((ords, (ords+size)/ !o%t--?[andom\enerator k% anHEn?/ [andom\enerator rg/ random$sh%## e((ords, (ords+size, rg)/ sho(((ords, (ords+size)/ srand(time(7)--1)/

!o%t--?randomAa %e( ) is evini k% anHEn?/ random$sh%## e((ords, (ords+size, randomAa %e)/ sho(((ords, (ords+size)/ ret%rn 7/ IJJJHK BBretilen ktC Narsa lan rastgele i k%llanC kamil ilkan t%rkan &evat damla selami ]and)m7enerat)r k%llanC selami kamil damla ilkan t%rkan &evat rand)mNal%e- / k%llanC t%rkan damla &evat selami ilkan kamil BB

remove( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipiC ?? Y)r_ardOterat)r rem)ve-Y)r_ardOterat)r +irst, Y)r_ardOterat)r last, 6 peV val%e/* 'klamaC ?? <ntipC 0+irst, last/ alannda iaret edilen !eler, val%e deerine eit )lma anlar alann balang&nda )lmak "ere, eniden sralanrlar# =!nen Y)r_ardOterat)r eni sralamadan s)nra siline&ek ilk !e i iaret eder# 0ret%rn val%e, last/ alg)ritmann artk alandr# 'rtklar arasnda val%e den baka deerler de )labilir, ama b%nlar gvenli bir ekilde silinebilir, a n 0+irst, ret%rn val%e/ alannda )ld%% gibi# 8lev, siline&ek !eleri iaret eden inele i&ilerin veri tipinin )perat)r..- / ile&ini, k%llanr# <rnekC BBC$@HCsilin#&pp BBrem)ve- / alg)ritmasnn k%llanm .in! %de -iostream* .in! %de -string* .in! %de -iterator*

.in! %de -a gorithm* %sing namespa!e std/ int main( )< string (ordsCD,<=ki o?, =a pha?, = ima?, =mike?, =a pha?, =novem&er?, =a pha?, =os!ar?, =a pha?, =a pha?, =papa?, =T%e&e!?I/ string0 removed/ %nsigned !onst size,sizeo#((ords)Jsizeo#(string)/ !o%t--?cepsini si E?a phaE?ninHEn?/ removed,remove((ords, (ords+size, =a pha?)/ !op"((ords, removed, ostream$iterator-string*(!o%t, = =))/ !o%t--end --?Mrtik o an oge erHEn?/ !op"(removed, (ords+size, ostream$iterator-string*(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHK BBretilen ktC 3epsini sil Xalpha[ nnC kil) lima mike n)vember )s&ar papa g%ebe& 'rtik )lan )gelerC )s&ar alpha alpha papa g%ebe& BB

remove$!op"( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipiC ?? O%tp%tOterat)r rem)veS&)p -Onp%tOterat)r +irst, Onp%tOterat)r last, O%tp%tOterat)r res%lt, 6 peV val%e/, 'klamaC ?? 0+irst, last/ tara+ndan iaret edilen !elerin val%e e eit )lma anlar, 0res%lt, ret%rnval%e/ alanna k)p alanr# ret%rnval%e ilev tara+ndan d!ndrlen deerdir# 0+irst, last/ alan deitirilme"# 8lev, inele i&ilerin iaret ettii veri tipinin )perat)r..- / ile&ini, k)p alanma a&ak !eleri belirlemekte k%llanlr#

<rnekC BBC$@HCk)p asil#&pp BBrem)veS&)p - / alg)ritma k%llanm .in! %de -iostream* .in! %de -string* .in! %de -a gorithm* .in! %de -iterator* .in! %de -#%n!tiona * %sing namespa!e std/ int main( )< string (ordsCD,<=ki o?, =a pha?, = ima?, =mike?, =a pha?, novem&er?, =a pha?, os!ar?, =a pha?, =a pha?, =papa?, =T%e&e!?I/ %nsigned !onst size,sizeo#((ords)Jsizeo#(string)/ string remainingCsize4!o%nt$i#((ords, (ords+size, &ind1nd(eT%a $to-string*( ), string(=a pha?)))D/ string0 ret%rnva %e,remove$!op"((ords, (ords+size, remaining, =a pha?)/ !o%t--?cepsini ka dir E?a phaE? ninH En?/ !op"(remaining, ret%rnva %e, ostream$iterator-string*(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHK BBretilen ktC 3epsini kaldir Xalpha[ nin kil) lima mike n)vember )s&ar papa g%ebe& BB

remove$i#( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipiC ?? Y)r_ardOterat)r rem)veSi+-Y)r_ardOterat)r +irst, Y)r_ardOterat)r last, Unar Kredi&ate pred/*

'klamaC ?? 0+irst, last/ alanndaki !eler, tek anl kstas pred in +alse hesaplanan btn deerleri alann en banda er ala&ak ekilde, eniden sralama a k)n%r# =!nen ileri inele i&i ilk !e i iaret eder, eniden sralama ilemi apldktan s)nra, pred iin tr%e d!ner# 0d!nen deer -ret%rnval%e/, last/ alan alg)ritmann arta kalandr# 'rta kalan ksmda, val%e den baka deerlerde )labilir, ama b%nlar ga et gvenli bir ekilde silinebilir, 0+irst, ret%rnval%e/ alannda )ld%% gibi# <rnekC BBC$@HCsileger#&pp BBrem)veSi+- / alg)ritma k%llanm .in! %de -iostream* .in! %de -a gorithm* .in! %de -#%n!tiona * .in! %de -string* .in! %de -iterator* %sing namespa!e std/ int main( )< string (ordsCD,<=ki o?, =a pha?, = ima?, =mike?, =a pha?, =novem&er?, =a pha?, =os!ar?, =a pha?, =a pha?, =papa?, =T%e&e!?I/ %nsigned !onst size,sizeo#((ords)Jsizeo#(string)/ !o%t--?cepsini E?a phaE? arin si HEn?/ string0 removed,remove$i#((ords, (ords+size, &ind1nd(eT%a $to-string*( ), string(=a pha?)))/ !op"((ords, removed, ostream$iterator-string*(!o%t, = =))/ !o%t--end --?Mrkadaki oge erHEn?/ !op"(removed, (ords+size, ostream$iterator-string*(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHK BBretilen ktC 3epsini Xalpha[ larin silC kil) lima mike n)vember )s&ar papa g%ebe& 'rkadaki )gelerC )s&ar alpha alpha papa g%ebe&

BB

remove$!op"$i#( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipiC ?? O%tp%tOterat)r rem)veS&)p Si+-Onp%tOterat)r +irst, Onp%tOterat)r last, O%tp%tOterat)r res%lt, Unar Kredi&ate pred/* 'klamaC ?? 0+irst, last/ alanndaki !eler tek anl kstas pred tr%e d!ndrdnde 0res%lt, ret%rnval%e/ alanna k)p alanr, b%rada ret%rnval%e ilev tara+ndan d!ndrlen deerdir# 0+irst, last/ alan deitirileme"# <rnekC BB$@HCsilk)peger#&pp BBrem)veS&)p Si+- / alg)ritma k%llanm .in! %de -iostream* .in! %de -string* .in! %de -a gorithm* .in! %de -#%n!tiona * .in! %de -iterator* %sing namespa!e std/ int main( )< string (ordsCD,<=ki o?, =a pha?, = ima?, =mike?, =a pha?, =novem&er?, =a pha?, =os!ar?, =a pha?, =a pha?, =papa?, =T%e&e!?I/ %nsigned !onst size,sizeo#((ords)Jsizeo#(string)/ string remainingCsize4!o%nt$i#((ords, (ords+size, &ind1nd(eT%a $to-string*( ), =a pha?))D/ string0 ret%rnva %e,remove$!op"$i#((ords, (ords+size, remaining, &ind1nd(eT%a $to-string*( ), =a pha?))/ !o%t--?cepsini si E?a phaE? arinHEn?/ !op"(remaining, ret%rnva %e, ostream$iterator-string*(!o%t, = =))/ !o%t--end /

ret%rn 7/ IJJJHK BBretilen ktC 3epsini sil Xalpha[ larinC kil) lima mike n)vember )s&ar papa g%ebe& BB

rep a!e( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipiC ?? Y)r_ardOterat)r repla&e-Y)r_ardOterat)r +irst, Y)r_ardOterat)r last, 6 peV )ldval%e, 6 peV ne_val%e/* 'klamalarC ?? 0+irst, last/ alannda er alan )ldval%e e eit btn !eler, ne_val%e nin bir k)p as ile er deitirir# 'lg)ritma, inele i&ilerin iaret ettii veri tipinin )perat)r..- / ile&ini k%llanr# <rnekC BBC$@HC erdeg#&pp BBrepla&e- / alg)ritma k%llanm .in! %de -a gorithm* .in! %de -string* .in! %de -iostream* .in! %de -iterator* %sing namespa!e std/ int main( )< string (ordsCD,<=ki o?, =?a pha?, = ima?, =mike?, =a pha?, =novem&er?,=a pha?, =os!ar?, =a pha?, =a pha?, =papa?, =T%e&e!?I/ %nsigned !onst size,sizeo#((ords)Jsizeo#(string)/ rep a!e((ords, (ords+size, string(=a pha?), string(=ML>cM?))/ !op"((ords, (ords+size, ostream$iterator-string*(!o%t, = =))/ !o%t--end /

ret%rn 7/ IJJJHK BBretilen ktC kil) 'LK3' lime mike 'LK3' n)vember 'LK3' )s&ar 'LK3' 'LK3' papa g%ebe& BB

rep a!e$!op"( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipiC ?? O%tp%tOterat)r repla&eS&)p -Onp%tOterat)r +irst, Onp%tOterat)r last, O%tp%tOterat)r res%lt, 6 peV )ldval%e, 6 peV ne_val%e/* 'klamalarC ?? 0+irst, last/ alann&a iaret edilen )ldval%e e eit btn !eler, 0res%lt, ret%rnval%e/ eni alannda ne_val%e nin bir k)p as ile er deitirirler# ret%rnval%e ilevin geri d!n deeridir# 'lg)ritma, inele i&ilerin iaret ettii veri tipinin )perat)r..- / ile&ini k%llanr# <rnekC BBC$@HCk)p adeg#&pp BBrepla&eS&)p - / alg)ritma k%llanm .in! %de -iostream* .in! %de -string* .in! %de -a gorithm* .in! %de -iterator* %sing namespa!e std/ int main( )< string (ordsCD,<=ki o?, =a pha?, = ima?, =mike?, =a pha?, =novem&er?,=a pha?, =os!ar?, =a pha?, =a pha?, =papa?, =T%e&e!?I/ %nsigned !onst size,sizeo#((ords)Jsizeo#(string)/ string remainingCsizeD/ !op"(remaining, rep a!e$!op"((ords, (ords+size, remaining,

string(=a pha?), string(=ML>cM?)), ostream$iterator-string*(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHK BBretilen ktC kil) 'LK3' lima mike 'LK3' n)vember 'LK3' )s&ar 'LK3' 'LK3' papa g%ebe& BB

rep a!e$i#( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipiC ?? Y)r_ardOterat)r repla&eSi+-Y)r_ardOterat)r +irst, Y)r_ardOterat)r last, Unar Kredi&ate pred, 6 pe &)nstV val%e/* 'klamalarC ?? 0+irst, last/ alann&a iaret edilen !elerin, tek anl kstas pred tara+ndan d)r% -tr%e/ )larak belirlenenleri ne_val%e - eni deer/ ile er deitirir# <rnekC BBC$@HCdegeger#&pp BBrepla&eSi+- / alg)ritma k%llanm .in! %de -iostream* .in! %de -a gorithm* .in! %de -string* .in! %de -#%n!tiona * .in! %de -iterator* %sing namespa!e std/ int main( )< string (ordsC D,<=ki o?, =a pha?, = ima?, =mike?, =a pha?, =novem&er?, a pha?, =os!ar?, =a pha?, =a pha?, =papa?, T%e&e!I/ %nsigned !onst size,sizeo#((ords)Jsizeo#(string)/ rep a!e$i#((ords, (ords+size,

&ind1st(greater-string*( ), string(=mike?)), string(=ML>cM?))/ !op"((ords, (ords+size, ostream$iterator-string*(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHK BBretilen ktC kil) 'LK3' lima mike 'LK3' n)vember 'LK3' )s&ar 'LK3' 'LK3' papa g%ebe& BB

rep a!e$!op"$i#( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipiC ?? O%tp%tOterat)r repla&eS&)p Si+-Y)r_ardOterat)r +irst, Y)r_ardOterat)r last, O%tp%tOterat)r res%lt, Unar Kredi&ate pred, 6 pe&)nstV val%e/* ??'klamalarC ?? 0+irst, last/ tara+ndan iaret edilen !eler 0res%lt, ret%rval%e/ alanna k)p alanr, ret%rnval%e ilev tara+ndan d!ndrlen deerdir# 6ek anl kstas pred tara+ndan d)r% -tr%e/ d!ndren !eler ne_val%e deeri ile er deitirir# 0+irst, last/ alan deitirilme"# <rnekC BBC$@HCk)p erde#&pp BBrepla&eS&)p Si+- / alg)ritma k%llanm .in! %de -iostream* .in! %de -a gorithm* .in! %de -string* .in! %de -#%n!tiona * .in! %de -iterator* %sing namespa!e std/ int main( )< string (ordsCD,<=ki o?, =a pha?, = ima?, =mike?, =a pha?,

=novem&er?, =a pha?, =os!ar?, =a pha?, =a pha?, =papa?, =T%e&e!?I/ %nsigned !onst size,sizeo#((ords)Jsizeo#(string)/ string res% tCsizeD/ rep a!e$!op"$i#((ords, (ords+size, res% t, &ind1st(greater-string*( ), string(=mike?)), string(=ML>cM?))/ !op"(res% t, res% t+size, ostream$iterator-string*(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHK BBretilen !"mC -dikkat hepsi tek satrda )la&akMM# aa a smad/ 'LK3' 'LK3' 'LK3' mike 'LK3' n)vember 'LK3' )s&ar 'LK3' 'LK3' papa g%ebe& BB

reverse( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipiC ?? v)id reverse-$idire&ti)nalOterat)r +irst, $idire&ti)nalOterat)r last/* 'klamaC ?? 0+irst, last/ alanndaki !eler tersten a"lr# <rnekC BBC$@HCtersten#&pp BBreverse- / alg)ritma k%llanm .in! %de -a gorithm* .in! %de -iostream* .in! %de -string* %sing namespa!e std/ int main( )< string ine/

(hi e(get ine(!in, ine))< reverse( ine.&egin( ), ine.end( ))/ !o%t-- ine--end / I ret%rn 7/ IJJJHK BBb%n% anlatma a gerek )k# Satr )ld%% gibi tersten a"ar

reverse$!op"( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipiC ?? O%tp%tOterat)r reverseS&)p -$idire&ti)nalOterat)r +irst, $idire&ti)nalOterat)r last, O%tp%tOterat)r res%lt/* 'klamalarC ?? 0+irst, last/ alanndaki !eler 0res%lt, ret%rnval%e/ alanna ters sralamada k)p alanr# ret%rnval%e deeri ilevden d!nen deerdir# <rnekC BBC$@HCtersk)p a#&pp BBreverseS&)p - / alg)ritma k%llanm .in! %de -iostream* .in! %de -a gorithm* .in! %de -string* %sing namespa!e std/ int main( )< string ine/ (hi e(get ine(!in, ine))< %nsigned size, ine.size( )/ !har !op"Csize+1D/ !o%t--? ineH =-- ine--end --?reversedH =/ reverse$!op"( ine.&egin( ), ine.end( ), !op")/ !op"CsizeD,7/ JJ 7 ters enmi2 sat3r3n &ir parOas3 deGi

!o%t--!op"--end / I ret%rn 7/ IJJJHK BBb%n% da aklama a gerek )k

rotate( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipiC ?? v)id r)tate-Y)r_ardOterat)r +irst, Y)r_ardOterat)r middle, Y)r_ardOterat)r last/* 'klamalarC ?? 0+irst, middle/ alanndaki !eler kabn s)n%na, 0middle, last/ alanndaki !eler kabn balang b!lmne aktarlr# <e sralamas iki altkme birbirini b)"madan d"enlenir# <rnekC BBC$@HCt%rla#&pp BBr)tate- / alg)ritma k%llanm .in! %de -iostream* .in! %de -a gorithm* .in! %de -string* .in! %de -iterator* %sing namespa!e std/ int main( )< string (ordsCD,<=ki o?, = ima?, =mike?, =novem&er?, =os!ar?, =papa?, e!ho?, =#o'trot?, =go #?, =hote ?, =india?, =Q% iet?I/ %nsigned !onst size,sizeo#((ords)Jsizeo#(string)/ %nsigned !onst midsize,:/ rotate((ords, (ords+midsize, (ords+size)/ !op"((ords, (ords+size, ostream$iterator-string*(!o%t, = =))/ !o%t--end /

ret%rn 7/ IJJJHK BBretilen ktC e&h) +)Ztr)t g)l+ h)tel india e%liet kil) lima mike n)vember )s&ar papa BB

rotate$!op"( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipiC ?? O%tp%tOterat)r r)tateS&)p -Y)r_ardOterat)r +irst, Y)r_ardOterat)r middle, Y)r_ardOterat)r last, O%tp%tOterat)r res%lt/* 'klamalarC ?? <n&e 0middle, last/ !eleri, daha s)nra da 0+irst, middle/ !eleri 0res%lt, ret%rnval%e/ alanna sahip var kabna k)p alanrlar# $%rada ret%rnval%e ilev tara+ndan d!ndrlen inele i&idir# 8ki alt kmede er alan !elerin sralamas deitirileme"# <rnekC BBC$@HCt%r%k)p#&pp BBr)tateS&)p - / alg)ritma k%llanm .in! %de -a gorithm* .in! %de -iostream* .in! %de -string* .in! %de -iterator* %sing namespa!e std/ int main( )< string (ordsCD,<=ki o?,? ima?, =mike?, =novem&er?, =os!ar?, =papa?, =e!ho?, ?#o'trot?, =go #?, =hote ?, =india?, =Q% iet?I/ %nsigned !onst size,sizeo#((ords)Jsizeo#(string)/ %nsigned midsize,:/ string o%tCsizeD/ !op"(o%t, rotate$!op"((ords, (ords+midsize, (ords+size, o%t), ostream$iterator-string*(!o%t, = =))/

!o%t--end / ret%rn 7/ IJJJHK BBretilen ktC e&h) +)Ztr)t g)l+ h)tel india e%liet kil) lima mike n)vember )s&ar papa BB

sear!h( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipleriC ?? Y)r_ardOterat)rD sear&h-Y)r_ardOterat)rD +irstD, Y)r_ardOterat)rD lastD, Y)r_ardOterat)rE +irstE, Y)r_ardOterat)rE lastE/* ?? Y)r_ardOterat)rD sear&h-Y)r_ardOterat)rD +irstD, Y)r_ardOterat)rD lastD, Y)r_ardOterat)rE +irstE, Y)r_ardOterat)rE lastE, $inar Kredi&ate pred/* 'klamalarC ?? $irin&i !ntipC 9inele i&ilerin iaret ettii veri tipinin )perat)r..- / ile&i k%llanlarak 0+irstE, lastE/ alanndaki !elerin saptand erde, 0+irstD, lastD/ alanna bir inele i&i d!ndrlr# $! le bir er b%l%nama"sa lastD d!ner# ?? 8kin&i !ntipC 3er iki alandaki !eleri karlatrmak iin iki&i -binar / kstas pred k%llanlarak 0+irstE, lastE/ alanndaki !elerin saptand erde, 0+irstD, lastD/ alanna bir inele i&i d!ndrlr# $! le bir er b%l%nama"sa lastD d!ner# <rnekC BBC$@HCara#&pp BBsear&h- / alg)ritma k%llanm .in! %de -a gorithm* .in! %de -iterator* .in! %de -iostream* ! ass a&s;nt< p%& i!H

&oo operator( )(int i1, int i1)< ret%rn a&s(i1),,a&s(i1)/ I I/ %sing namespa!e std/ int main( )< int range1CD,<41, 48, 4:, 4d, 1, 8, :, dI/ int range1CD,<:, dI/ !op"(sear!h(range1, range1+d, range1, range1+1), range1+d, ostream$iterator-int*(!o%t, = =))/ !o%t--end / !op"(sear!h(range1, range1+d, range1, range1+1, a&s;nt( )), range1+d, ostream$iterator-int*(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHK BBretilen ktC >` ?> ?` E G > ` BB

sear!h$n( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipleriC ?? Y)r_ardOterat)rD sear&hSn-Y)r_ardOterat)rD +irstD, Y)r_ardOterat)rD lastD, Si"e &)%nt, 6 pe &)nstV val%e/* ?? Y)r_ardOterat)rD sear&hSn-Y)r_ardOterat)rD +irstD, Y)r_ardOterat)rD lastD, Si"e &)%nt, 6 pe &)nstV val%e, $inar Kredi&ate pred/* 'klamalarC ?? $irin&i !ntipC <eleri karlatrmak iin k%llanlan inele i&ilerin veri tipinin )perat)r..- / ile&i k%llanlr# val%e deerine sahip n tane !enin b%l%nd%% erde, 0+irstD, lastD/ ilk alana bir inele i&i d!ner# $! le bir er )ksa ) "aman lastD d!ner#

?? 8kin&i !ntipC <eleri karlatrmak iin verilen iki&i -binar / kstas pred k%llanlr# val%e deerine sahip n tane !enin b%l%nd%% erde, 0+irstD, lastD/ ilk alana bir inele i&i d!ner# $! le bir er )ksa lastD d!ner# <rnekC BBC$@HCnara#&pp BBsear&hSn- / alg)ritma k%llanm .in! %de -iostream* .in! %de -a gorithm* .in! %de -iterator* ! ass a&s;nt< p%& i!H &oo operator( )(int i1, int i1)< ret%rn a&s(i1),,a&s(i1)/ I I/ %sing namespa!e std/ int main( )< int range1CD,<41, 48, 48, 4:, 4d, 1, 8, 8, :, dI/ int range1CD,<:, dI/ !op"(sear!h$n(range1, range1+d, 1, 8), range1+d, ostream$iterator-int*(!o%t, = =))/ !o%t--end / !op"(sear!h$n(range1, range1+d, 1, 8, a&s;nt( )), range1+d, ostream$iterator-int*(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHK BBretilen ktC GG ?G ?G ?> ?` E G G BB

set$di##eren!e( )
$alk d)s asC

^in&l%de alg)rithm5 8lev !ntipleriC ?? O%tp%tOterat)r setSdi++eren&e-Onp%tOterat)rD +irstD, Onp%tOterat)rD lastD, Onp%tOterat)rE +irstE, Onp%tOterat)rE lastE, O%tp%tOterat)r res%lt/* ?? O%tp%tOterat)r setSdi++eren&e-Onp%tOterat)rD +irstD, Onp%tOterat)rD lastD, Onp%tOterat)rE +irstE, Onp%tOterat)rE lastE, O%tp%tOterat)r res%lt, C)mpare &)mp/* 'klamalarC ?? $irin&i !ntipC 0+irstE, lastE/ alannda b%l%nma an 0+irstD, lastD/ alanndaki sral !eler di"isi d!ner, b% res%lt ta balar ilev tara+ndan d!ndrlen O%tp%tOterat)r da biter# 3er iki alandaki !eler, inele i&inin iaret ettii veri tipinin )perat)r4- / ile&i k%llanlarak sra a di"ilmek ")r%ndadr# ??8kin&i !ntipC 0+irstE, lastE/ alannda b%l%nma an 0+irstD, lastD/ alanndaki sral !eler di"isi d!ner, b% res%lt ta balar ilev tara+ndan d!ndrlen O%tp%tOterat)r da biter# 3er iki alandaki !eler &)mp ilev nesnesi k%llanlarak sra a di"ilmek ")r%ndadr# <rnekC BBC$@HC+arka ar#&pp BBsetSdi++eren&e- / alg)ritma k%llanm .in! %de -iostream* .in! %de -a gorithm* .in! %de -string* .in! %de -iterator* ! ass CaseLess< p%& i!H &oo operator( )(stdHHstring !onst6 e#t, stdHHstring !onst6 right)< ret%rn str!ase!mp( e#t.!$str( ), right.!$str( ))-7/ I I/ %sing namespa!e std/ int main( )< string set1CD,<=ki o?, = ima?, =mike?, =novem&er?, =os!ar?, =papa?, T%e&e!?I/ string set1CD,<=papa?, =T%e&e!?, =romeo?I/ string res% tCFD/

string0 ret%rned/ !op"(res% t, set$di##eren!e(set1, set1+F, set1, set1+5, res% t), ostream$iterator-string*(!o%t, = =))/ !o%t--end / string set5CD,<=>M>M?, =hWSBSC?, =[`MS`?I/ !op"(res% t, set$di##eren!e(set1, set1+F, set5, set5+5, res% t, CaseLess( )), ostream$iterator-string(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHK BBretilen ktC kil) lima mike n)vember )s&ar kil) lima mike n)vember )s&ar BB

set$interse!tion( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipleriC ?? O%tp%tOterat)r setSinterse&ti)n-Onp%tOterat)rD +irstD, Onp%tOterat)rD lastD, Onp%tOterat)rE +irstE, Onp%tOterat)rE lastE, O%tp%tOterat)r res%lt/* ?? O%tp%tOterat)r setSinterse&ti)n-Onp%tOterat)rD +irstD, Onp%tOterat)rD lastD, Onp%tOterat)rE +irstE, Onp%tOterat)rE lastE, O%tp%tOterat)r res%lt, C)mpare &)mp/* 'klamalrC ?? $irin&i !ntipC 0+irstD, lastD/ alann&a iaret edilen ve a r&a 0+irstE, lastE/ alannda da b%l%nan !elerin sral di"isi geri d!ner# $% res%lt ta balar, ilev tara+ndan d!ndrlen O%tp%tOterat)r de biter# 3er iki alann !eleri, inele i&ilerin iaret ettii veri tipinin )perat)r4- / ile&i k%llanlarak sralanmak ")r%ndadr# ?? 8kin&i !ntipC 0+irstD, lastD/ alann&a iaret edilen ve a r&a 0+irstE, lastE/ alannda da b%l%nan !elerin sral di"isi geri d!ner# $% res%lt ta balar, ilev tara+ndan d!ndrlen O%tp%Oterat)r da biter# 3er iki alann !eleri,

&)mp ilev nesnesi k%llanlarak sralanmak ")r%ndadr# <rnekC BBC$@HCkesima #&pp BBsetSinterse&ti)n- / alg)ritma k%llanm .in! %de -iostream* .in! %de -a gorithm* .in! %de -string* .in! %de -iterator* ! ass CaseLess< p%& i!H &oo operator( )(stdHHstring !onst6 e#t, stdHHstring !onst6 right)< ret%rn str!ase!mp( e#t.!$str( ), right.!$str( ))-7/ I I/ %sing namespa!e std/ int main( )< string set1CD,<=ki o?, = ima?, =mike?, =novem&er?, =os!ar?, =papa?, T%e&e!?I/ string set1CD,<=papa?, =T%e&e!?, =romeo?I/ string res% tCFD/ string0 ret%rned/ !op"(res% t, set$interse!tion(set1, set1+F, set1, set1+5, res% t), ostream$iterator-string*(!o%t, = =))/ !o%t--end / string set5CD,<=>M>M?, =hWSBSC?, =[`MS`?I/ !op"(res% t, set$interse!tion(set1, set1+F, set5, set5+5, res% t, CaseLess( )), ostream$iterator-string*(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHK BBretilen ktC papa g%ebe& papa g%ebe& BB

set$s"mmetri!$di##eren!e( )

$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipleriC ?? O%tp%tOterat)r setSs mmetri&Sdi++eren&e-Onp%tOterat)rD +irstD, Onp%tOterat)rD lastD, Onp%tOterat)rE +irstE, Onp%tOterat)rE lastE, O%tp%tOterat)r res%lt/, ?? O%tp%tOterat)r setSs mmetri&Sdi++eren&e-Onp%tOterat)rD +irstD, Onp%tOterat)rD lastD, Onp%tOterat)rE +irstE, Onp%tOterat)rE lastE, O%tp%tOterat)r res%lt, C)mpare &)mp/* 'klamalarC ?? $irin&i !ntipC 0+irstE, lastE/ alannda b%l%nma p 0+irstD, lastD/ alann&a g!sterilen ve 0+irstD, lastD/ alannda b%l%nma p 0+irstE, lastE/ alann&a g!sterilen !elerin sral di"isi d!ner# $% res%lt ta balar, ilev tara+ndan d!ndrlen O%tp%tOterat)r da biter# 3er iki alandaki, !eler inele i&ilerin iaret ettii veri tipinin, )perat)r4- / ile&i k%llanlarak sralanmak ")r%ndadr# ?? 8kin&i !ntipC 0+irstE, lastE/ alannda b%l%nma p 0+irstD, lastD/ alnn&a g!sterilen ve 0+irstD, lastD/ alnnda b%l%nma p 0+irstE, lastE/ alann&a g!sterilen !elerin sral di"isi d!ner# $% res%lt ta balar, ilev tara+ndan d!ndrlen O%tp%tOterat)r da biter# 3er iki alandaki !eler &)mp ilev nesnesi k%llanlarak sralanmak ")r%ndadr# <rnek* BBC$@HCa bak+ark#&pp BBsetSs mmetri&Sdi++eren&e- / alg)ritma k%llanm .in! %de -iostream* .in! %de -string* .in! %de -a gorithm* .in! %de -iterator* ! ass CaseLess< p%& i!H &oo operator( )(stdHHstring !onst6 e#t, stdHHstring !onst6 right)< ret%rn str!ase!mp( e#t.!$str( ), right.!$str( ))-7/ I I/ %sing namespa!e std/

int main( )< string set1CD,<=ki o?, = ima?, =mike?, =novem&er?, =os!ar?, =papa?, T%e&e!?I/ string set1CD,<=papa?, =T%e&e!?, =romeo?I/ string res% tCFD/ string0 ret%rned/ !op"(res% t, set$s"mmetri!$di##eren!e(set1, set1+F, set1, set1+5, res% t, ostream$iterator-string*(!o%t, = =))/ !o%t--end / string set5C D,<=>M>M?, =hWSBSC?, =[`MS`?I/ !op"(res% t, set$s"mmetri!$di##eren!e(set1, set1+F, set5, set5+5, res% t, CaseLess( )), ostream$iterator-string*(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHK BBretilen ktC kil) lima mike n)vember )s&ar r)me) kil) lima mike n)vember )s&ar ]OUTO BB

set$%nion( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipleriC ?? O%tp%tOterat)r setS%ni)n-Onp%tOterat)r +irstD, Onp%tOterat)r lastD, Onp%tOterat)rE +irstE, Onp%tOterat)rE lastE, O%tp%tOterat)r res%lt/* ?? O%tp%tOterat)r setS%ni)n-Onp%tOterat)r +irstD, Onp%tOterat)r lastD, Onp%tOterat)rE +irstE, Onp%tOterat)rE lastE, O%tp%tOterat)r res%lt, C)mpare &)mp/* 'klamalarC ?? $irin&i !ntipC 0+irstD, lastD/ alann&a iaret edilen ve a r&a 0+irstE, lastE/ alannda da b%l%nan !elerin sral di"isi d!ner# $% res%lt ta balar ve ilev tara+ndan d!ndrlen O%tp%tOterat)r da biter# 3er iki alandaki !eler inele i&ilerin iaret ettii veri tipinin )perat)r4- / ile&i k%llanlarak sralanmak ")r%ndadr#

?? 8kin&i !ntipC 0+irstD, lastD/ alann&a iaret edilen ve a r&a 0+irstE, lastE/ alannda da b%l%nan !elerin sral di"isi d!ner# $% res%lt ta balar, ve ilev tara+ndan d!ndrlen O%tp%tOterat)r da biter# 3er iki alandaki !eler &)mp ilev nesnesi k%llanlarak sralanmak ")r%ndadr# <rnekC BBC$@HCbirlikk%r#&pp BBsetS%ni)n- / alg)ritma k%llanm .in! %de -iostream* .in! %de -a gorithm* .in! %de -string* .in! %de -iterator* ! ass CaseLess< p%& i!H &oo operator( )(stdHHstring !onst6 e#t, stdHHstring !onst6 right)< ret%rn str!ase!mp( e#t.!$str( ), right.!$str( ))-7/ I I/ %sing namespa!e std/ int main( )< string set1CD,<=ki o?, ima?, =mike?, =novem&er?, =os!ar?, =papa?, =T%e&e!?I/ string set1CD,<=papa?, =T%e&e!?, =romeo?I/ string res% tCFD/ string0 ret%rned/ !op"(res% t, set$%nion(set1, set1+F, set1, set1+5, res% t), ostream$iterator-string*(!o%t, = =))/ !o%t--end / string set5CD,<=>M>M?, =hWSBSC?, =[`MS`?I/ !op"(res% t, set$%nion(set1, set1+F, set5, set5+5, res% t, CaseLess( )), ostream$iterator-string*(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHK BBretilen ktC kil) lima mike n)vember )s&ar papa g%ebe& r)me) kil) lima mike n)vember )s&ar papa g%ebe& ]OUTO BB

sort( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipleriC ?? v)id s)rt-]and)m'&&essOterat)r +irst, ]and)m'&&essOterat)r last/* ?? v)id s)rt-]and)m'&&essOterat)r +irst, ]and)m'&&essOterat)r last, C)mpare &)mp/* 'klamalarC ??$irin&i !ntipC 0+irst, last/ alanndaki !eler inele i&ilerin iaret ettii veri tipinin )perat)r4- / ile&i k%llanlarak artarak sralanr# ?? 8kin&i !ntipC 0+irst, last/ alanndaki !eler &)mp ilev nesnesi k%llanlarak karlatlrlar ve deerleri artarak sralanrlar# Sral di"ide ilk deiken ikin&i deikenden !n&e er alrsa, ) "aman iki&i -binar / kstas &)mp d)r% -tr%e/ deer d!ndrr# <rnekC BBC$@HCsirala#&pp BBs)rt- / alg)ritma k%llanm .in! %de -iostream* .in! %de -string* .in! %de -a gorithm* .in! %de -iterator* .in! %de -#%n!tiona * %sing namespa!e std/ int main( )< string (ordsCD,<=novem&er?, =ki o?, =mike?, = ima?, =os!ar?, =T%e&e!?, =papa?I/ sort((ords, (ords+F)/ !op"((ords, (ords+F, ostream$iterator-string*(!o%t, = =))/ !o%t--end / sort((ords, (ords+F, greater-string*( ))/ !op"((ords, (ords+F, ostream$iterator-string*(!o%t, = =))/ !o%t--end / ret%rn 7/

IJJJHK BBretilen ktC kil) lima mike n)vember )s&ar papa g%ebe& g%ebe& papa )s&ar n)vember mike lima kil) BB

sta& e$partition( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipiC ?? $idire&ti)nalOterat)r stableSpartiti)n-$idire&ti)nalOterat)r +irst, $idire&ti)nalOterat)r last, Unar Kredi&ate pred/* 'klamalarC ?? 6ek anl kstas pred in 0+irst, last/ alannda d)r% -tr%e/ hesaplad !elerin hepsi, anl -+alse/ hesaplanan !elerden !n&e erletirilir# Kapta er alan eit !elerin g!re&eli k)n%m% k)r%n%r# =!n deeri pred tara+ndan d)r% -tr%e/ hesaplanm b!lmelenmi alandaki s)n !eden !tesini iaret eder# <rnekC BBC$@HCkararpa #&pp BBstableSpartiti)n- / alg)ritma k%llanm .in! %de -iostream* .in! %de -#%n!tiona * .in! %de -a gorithm* .in! %de -string* .in! %de -iterator* %sing namespa!e std/ int main( )< int orgCD,<1, 5, 9, F, e, 17, 1, d, :, 8I/ int iaC17D/ int0 sp it/ !op"(org, org+17, ia)/ sp it,partition(ia, ia+17, &ind1nd( ess$eT%a -int*( ), iaCeD))/

!o%t--?Son oge-,8 H iaC=--sp it4ia41-- ?DEn?/ !op"(ia, ia+17, ostream$iterator-int*(!o%t, = = ))/ !o%t--end / !op"(org, org+17, ia)/ sp it,sta& e$partition(ia, ia+17, &ind1nd( ess$eT%a -int*( ), iaCeD))/ !o%t--?Son oge-,8 H iaC=--sp it4ia41-- ?DEn?/ !op"(ia, ia+17, ostream$iterator-int(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHK BBretilen ktC S)n )ge4.G C ia0F1 D F G E R D@ d ` > H S)n )ge4.G C ia0F1 D F E G H d R D@ ` > BB

sta& e$sort( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipleriC ?? v)id stableSs)rt-]and)m'&&essOterat)r +irst, ]and)m'&&essOterat)r last/* ?? v)id stableSs)rt-]and)m'&&essOterat)r +irst, ]and)m'&&essOterat)r Last, C)mpare &)mp/* 'klamalarC ?? $irin&i !ntipC 0+irst, last/ alanndaki !eler inele i&ilerin iaret ettii veri tipinin )perat)r4- / ile&i k%llanlarak artan ekilde kararl )larak sralanrlar# ' n !elerin biribirlerine g!re erleri k)r%n%r# ?? 8kin&i !ntipC 0+irst, last/ alanndaki !eler iki&i -binar / kstas &)mp k%llanlarak aratan ekilde kararl )larak sralanrlar# $% kstas, sralanm !e kmesinde ilk deiken ikin&i deikenden !n&e erletirilmise, d)r% -tr%e/ deer d!ndrmesi la"mdr# <rnekC

BBC$@HCkarsira#&pp BBstableSs)rt- / alg)ritma k%llanm .in! %de -iostream* .in! %de -a gorithm* .in! %de -string* .in! %de -#%n!tiona * .in! %de -ve!tor* .in! %de -iterator* t"pede# sdtHHpair-stdHHstring, stdHHstring* pss / JJmetne &ak namespa!e sdt< ostream6 operator--(ostream6 o%t, pss !onst6 p)< ret%rn o%t(--? =--p.#irst--? =--p.se!ond--end / I I ! ass sort&"< stdHHstring pssHH0d$#ie d/ p%& i!H sort&"(stdHHstring pssHH0#ie d) H d$#ie d(#ie d)< I &oo operator( )(pss !onst6 p1, pss !onst6 p1) !onst< ret%rn p1.0d$#ie d-p1.0d$#ie d/ I I/ %sing namespa!e std/ int main( )< ve!tor-pss* name!it"/ name!it".p%sh$&a!k(pss(=campson?, =\oda ming?))/ name!it".p%sh$&a!k(pss(=Moran?, =S%gene?))/ name!it".p%sh$&a!k(pss(=\o d&erg?, =S%gene?))/ name!it".p%sh$&a!k(pss(=Moran?, =\oda ming?))/ name!it".p%sh$&a!k(pss(=\o d&erg?, =Chi!ago?))/ name!it".p%sh$&a!k(pss(=campson?, =S%gene?))/ sort(name!it".&egin( ), name!it".end( ), sort&"(6pssHH#irst))/ JJ: !o%t--?isim eri sira anmisH En?/ !op"(name!it".&egin( ), name!it".end( ), ostream$iterator-pss*(!o%t))/ JJF sta& e$sort(name!it".&egin( ), name!it".end( ), sort&"(6pssHHse!ond))/

!o%t--?sira i i erde isim erin sira anmasiH En?/ !op"(name!it".&egin( ), name!it".end( ), ostream$iterator-pss*(!o%t))/ ret%rn 7/ IJJJHK BBretilen ktC isimleri siralanmisC 7)ldberg T%gene 7)ldberg Chi&ag) 3amps)n 7)dalming 3amps)n T%gene U)ran T%gene U)ran 7)dalming sirali illerde isimlerin siralanmasiC 7)ldberg Chi&ag) 7)ldberg T%gene 3amps)n T%gene U)ran T%gene 3amps)n 7)dalming U)ran 7)dalming BB <rneimi" )k sk rastlanlan bir s)r%na !"m retmektedirC sralama birden +a"la hi erarik kstas % g%la arak apmak# <rneimi" a r&a ba" dikkat eki&i !"ellikler de tamaktadrC D? 8lki* t pede+ k%llanarak pair4string, string5 tekrarlar engellenmi ve danklktan da k%rt%l%nm% )ld%# E? 8kin&isi* )perat)r44- / bindirilmi ile&i sa esinde bir pair in )stream nesnesine erletirilmesi saland# $% ha at )ld%ka k)la latran bir servis ilevi idi# $ir e i daha belirtelim b% ilev std isim alannda# Ter std isim alanna k)nmam )lsa d, k%llanlama"d# Ostream in )perat)r44- / ile&i m%tlaka std isim alannda b%l%nmaldr# F? 6anm verilmi )lan s)rtb sn+ an)nim nesne )l%t%rma a ve b% da sralamada k%llanla&ak )lan pair veri elerinin birini iaret eden g!sterge alr# $% d%r%mda her iki e string nesnedir# 9ap& ilev k)la lkla tanmlanabilir* deikeni, pair4string, string5 sn+nn string esine g!stergetir# G? )perat)r- /- / esi iki pair da an& alr, ve daha s)nra elere g!sterge&i k%llanr, pair in % g%n alanlarn karlatrmak iin s)rtedb

nesnesinde saklanr# H? main- / ilevinde ba" ilk veriler ve&t)r de saklanr# >? =aha s)nra ilk sralama aplr# Tn a" !nemli kstas !n&e sralanmaldr, ve b%n%n iin basit s)rt- / ilevi eterli gelir# Uademki ehirlerin isimlerini sralamak isti )r%", ) "aman isimler en a" !nemli kstas erine getirmelidir* b% "den isimleri s)rtb -VpssCC+irst/ k%llanarak sral )r%"# d? $ir s)nraki !nemli kstas* ehirleri sralamaktr# 8simlerin birbirine g!re d"eni stableSs)rt- / tara+ndan hibir ekilde b)"%lma a&a iin , ehirler sralanrken g!rlen balantlar var)lan g!re&eli d"enleme b)"%lmadan !"mlenir# $! le&e retilen ktnn ikin&i arsndaki s)n%lar elde edilir# (ehirleri sralamak iin ikin&i an)nim s)rtb nesnesini k%llanr"C s)rtb -VpssCCse&)nd/#

s(ap( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipiC ?? v)id s_ap-6 peV )bee&tD, 6 peV )bee&tE/* 'klamaC ?? )bee&tD ile )bee&tE !elerinin deerleri erdeitirir# <rnekC BBC$@HC erdeg#&pp BBs_ap- / alg)ritma k%llanm .in! %de -iostream* .in! %de -a gorithm* .in! %de -string* .in! %de -iterator* %sing namespa!e std/ int main( )<

string #irstCD,<=a pha?, =&ravo?, =!har e"?I/ string se!ondCD,<=e!ho?, =#o'trot?, =go #?I/ %nsigned !onst n,sizeo#(#irst)Jsizeo#(string)/ !o%t--?on!eH E?/ !op"(#irst, #irst+n, ostream$iterator-string*(!o%t, = = ))/ !o%t--end / !op"(se!ond, se!ond+n, ostream$iterator-string*(!o%t, = =))/ !o%t--end / #or(%nsigned id',7/ id'-n/ ++id') s(ap(#irstCid', se!ondCid'D)/ !o%t--?sonraH En?/ !op"(#irst, #irst+n, ostream$iterator-string*(!o%t, = =))/ !o%t--end / !op"(se!ond, se!ond+n, ostream$iterator-string*(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHK BBretilen ktC )n&eC alpha brav) &harle e&h) +)Ztr)t g)l+ s)nraC e&h) +)Ztr)t g)l+ alpha brav) &harle BB

s(ap$ranges( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipiC ?? Y)r_ardOterat)rE s_apSranges-Y)r_ardOterat)rD +irst, Y)r_ardOterat)rD last, Y)r_ardOterat)rE res%lt/* 'klamaC ?? 0+irstD, lastD/ alanndaki !eler 0res%lt, ret%rnval%e/ alanndaki !elerle er deitirir# ret%rnval%e ilevden d!nen deerdir# 3eriki alan birbirinden

tamamen a rktr# <rnekC BBC$@HCalandeg#&pp BBs_apSranges- / alg)ritma k%llanm .in! %de -a gorithm* .in! %de -iostream* .in! %de -string* .in! %de -iterator* %sing namespa!e std/ int main( )< string #irstCD,<=a pha?, =&ravo?, =!har e"?I/ string se!ondCD,<=e!ho?, =#o'trot?, =go #?I/ %nsigned !onst n,sizeo#(#irst)Jsizeo#(string)/ !o%t--?on!eH En?/ !op"(#irst, #irst+n, ostream$iterator-string*(!o%t, = =))/ !o%t--end / !op"(se!ond, se!ond+n, ostream$iterator-string*(!o%t, = = ))/ !o%t--end / s(ap$ranges(#irst, #irst+n, se!ond)/ !o%t--?sonraH En?/ !op"(#irst, #irst+n, ostream$iterator-string*(!o%t, = =))/ !o%t--end / !op"(se!ond, se!ond+n, ostream$iterator-string*(!o%t, = =))/ !o%t--end / ret%rn 7/ IBBBCJ BBretilen ktC )n&eC alpha brav) &harle e&h) +)Ztr)t g)l+ s)nraC e&h) +)Ztr)t g)l+ alpha brav) &harle BB

trans#orm( )

$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipleriC ?? O%tp%Oterat)r trans+)rm-Onp%tOterat)r +irst, Onp%tOterat)r last, O%tp%tOterat)r res%lt, Unar Operat)r )p/* ?? O%tp%tOterat)r trans+)rm-Onp%tOterat)rD +irstD, Onp%tOterat)rD lastD, Onp%tOterat)rE +irstE, O%tp%tOterat)r res%lt, $inar Operat)r )p/* 'klamalarC ?? $irin&i !ntipC 0+irst, last/ alanndaki her !e e tek anl ile )p % g%lanr, s)n%lar res%lt tan bala an alana saklanr# =!nen deer, s)n retilen !enin hemen s)nrasn iaret eder# ?? 8kin&i !ntipC 0+irstD, lastD/ alanndaki her !e e ve denk gelen +irstE den bala an alann !elerine iki&i -binar / ile )p % g%lanr# S)n% deerler res%lt tan bala an alana saklanr# =!nen deer, s)n retilen !enin hemen s)nrasn iaret eder# <rnekC BBC$@HCd)n%s#&pp BBtrans+)rm- / alg)ritma k%llanm .in! %de -iostream* .in! %de -string* .in! %de -a gorithm* .in! %de -ve!tor* .in! %de -#%n!tiona * .in! %de -!!t"pe* .in! %de -iterator* ! ass Caps< p%& i!H stdHHstring operator( )(stdHHstring !onst6 sr!)< stdHHstring tmp,sr!/ trans#orm(tmp.&egin( ), tmp.end(), tmp.&egin( ), to%pper)/ ret%rn tmp/ I I/ %sing namespa!e std/ int main( )<

string (ordsCD,<=a pha?, =&ravo?, =!har e"?I/ !op"((ords, trans#orm((ords, (ords+5, (ords, Caps( )), ostream$iterator-string*(!o%t, = =))/ !o%t--end / int va %esCD,<1 1 5 8 9I/ ve!tor-int* sT%ares/ trans#orm(va %es, va %es+9, va %es, &a!k$inserter(sT%ares), m% tip ies-int*( ))/ !op"(sT%ares.&egin( ), sT%ares.end( ), ostream$iterator-string*(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHK BBretilen ktC 'LK3' $]'NO C3']LT9 D G R D> EH BB =aha !n&e in&elenen +)rSea&h- / ile trans+)rm- / alg)ritmalar arasndaki +arklarC D? trans+)rm- / ile ilev nesnesinin )perat)r- /- / esinin d!n deeri k%llanlrC )perat)r- /- / esine aktarlan deikenin kendisi deime"# E? +)rSea&h- / ile ilev nesnesi )perat)r- /- / deikenine bir da an alr, ilev nesnesinin )perat)r- /- / tara+ndan kendisi deitirilebilir#

%niT%e( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipleriC ?? Y)r_ardOterat)r %nig%e-Y)r_ardOterat)r +irst, Y)r_ardOterat)r last/* ?? Y)r_ardOterat)r %nig%e-Y)r_ardOterat)r +irst, Y)r_ardOterat)r last, $inar Kredi&ate pred/* 'klamalarC ?? $irin&i !ntipC 0+irst, last/ alanndaki birbirine eit )lan ardk !eler tek !e e indirgenir# - inele i&ilerin iaret ettii veri tipinin )perat)r..- /

ile&i k%llanlr/# =!nen ileri inele i&i alg)ritmann artann iaretler, ve %nig%e- / ilevi arlmadan !n&eki, alanda tek )larak b%l%nanlar t%tar# ?? 8kin&i !ntipC 0+irst, last/ alanndaki iki&i -binar / karlatrma %ns%r% pred in d)r% -tr%e/ d!ndrd ardk !eler tek !e e indirgenir# =!nen ileri inele i&i alg)ritmann artann iaretler, ve %nig%e- / ilevi arlmadan !n&eki, alanda tek )larak b%l%nanlar t%tar# <rnekC BBC$@HCtele#&pp BB%nig%e- / alg)ritma k%llanm .in! %de -a gorithm* .in! %de -iostream* .in! %de -string * .in! %de -iterator* ! ass CaseString< p%& i!H &oo operator( )(stdHHstring !onst6 #irst, stdH.string !onst6 se!ond) !onst< ret%rn +str!ase!mp(#irst.!$str( ), se!ond.!$str( ))/ I I/ %sing namespa!e std/ int main( )< string (ordsCD,<=a pha?, =a pha?, =ML>cM?, =papa?, =T%e&e!?I/ %nsigned !onst size,siezo#((ords)Jsizeo#(string)/ string0 removed,%niT%e((ords, (ords+size)/ !op"((ords, removed, ostream$iterator-string*(!o%t, = =))/ !o%t--end / --?arkadaki oge erH En?/ !op"(removed, (ords+size, ostream$iterator-string*(!o%t, = =))/ !o%t--end / removed,%niT%e((ords, (ords+size, CaseString( ))/ !op"((ords, removed, ostream$iterator-string*(!o%t, = =))/ !o%t--end / --?arkadaki oge erH En?/ !op"(removed, (ords+size, ostream$iterator-string*(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHK

BBretilen ktC alpha 'LK3' papa g%ebe& arkadaki )gelerC g%ebe& alpha papa g%ebe& arkadaki )gelerC g%ebe& g%ebe& BB

%niT%e$!op"( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipleriC ?? O%tp%tOterat)r %nig%eS&)p -Onp%tOterat)r +irst, Onp%tOterat)r last, O%tp%tOterat)r res%lt/* ?? O%tp%tOterat)r %nig%eS&)p -Onp%tOterat)r +irst, Onp%tOterat)r last, O%tp%tOterat)r res%lt, $inar Kredi&ate pred/* 'klamalarC ?? $irin&i !ntipC 0+irst, last/ alanndaki btn !eler res%lt tan bala arak s)n% kabna k)p alanr# ' n ardk !eler - inele i&inin iaret ettii veri tipinin )perat)r..- /ile&i k%llanlarak/ sade&e bir de+a k)p alanr# kt inele i&isinin d!nen deeri s)n k)p alanan !enin hemen s)nrasn iaret eder# ?? 8kin&in !ntipC 0+irst, last/ alanndaki btn !eler res%lt tan bala arak s)n% kabna k)p alanr# 0+irst, last/ alannda iki&i -binar / karlatrma %ns%r% pred in d)r% -tr%e/ d!ndrd ardk !eler sade&e bir de+a k)p alanr# kt inele i&isinin d!nen deeri s)n k)p alanan !enin hemen s)nrasn iaret eder# <rnekC BBC$@HCtekk)p a#&pp BB%nig%eS&)p - / alg)ritma k%llanm .in! %de -iostream* .in! %de -string*

.in! %de -a gorithm* .in! %de -ve!tor* .in! %de -iterator* .in! %de -#%n!tiona * ! ass CaseString< p%& i!H &oo operator( )(stdHHstring !onst6 #irst, stdHHstring se!ond6 se!ond) !onst< ret%rn +str!ase!mp(#irst.!$str( ), se!ond.!$str( ))/ I I/ %sing namespa!e std/ int main( )< string (ordsCD,<=os!ar?, =M pha?, =a pha?, =a pha?, =papa?, =T%e&e!?I/ %nsigned !onst size,sizeo#((ords)Jsizeo#(string)/ ve!tor-string* remaining/ %niT%e$!op"((ords, (ords+size, &a!k$inserter(remaining))/ !op"(remaining.&egin( ), remaining.end( ), ostream$iterator-string*(!o%t, = =))/ !o%t--end / ve!tor-string* remaining1/ %niT%e$!op"((ords, (ords+size, &a!k$inserter(remaining1), CaseString( ))/ !op"(remaining1.&egin( ), remaining1.end( ), ostream$iterator-string*(!o%t, = =))/ !o%t--end / ret%rn 7/ IJJJHK BBretilen ktC )s&ar 'lpha alpha papa g%ebe& )s&ar 'lpha papa g%ebe& BB

%pper$&o%nd( )
$alk d)s asC

^in&l%de 4alg)rithm5 8lev !ntipleriC ?? Y)r_ardOterat)r %pperSb)%nd-Y)r_ardOterat)r +irst, Y)r_ardOterat)r last, 6 pe &)nstV val%e/* ?? Y)r_ardOterat)r %pperSb)%nd-Y)r_ardOterat)r +irst, Y)r_ardOterat)r last, 6 pe &)nstV val%e, C)mpare &)mp/* 'klamalarC ?? $irin&i !ntipC 0+irst, last/ alanndaki sral !eler val%e den b k ilk !e e rastlanana kadar aratrlr# 9inele i&i, sral !elerin d"eni b)"%lmaks"n val%e nin erletirilebildii eri g!stermek iin d!nd erle iaret eder# $! le bir !e )ksa last d!ner# ?? 8kin&i !ntipC 0+irst, last/ alanndaki !eler &)mp ilevi ve a ilev nesnesi k%llanlarak sra a di"ilir# 'landaki her !e val%e ile, &)mp ilevi k%llanlarak karlatrlr# 8ki&i -binar / kstas pred in, d)r% -tr%e/ deer d!ndren alandaki !eler ve val%e deerine % g%lanmas ile, ilk !e inele i&isi d!ner# $! le bir !e )ksa last d!ner# <rnekC BBC$@HC%stsinir#&pp BB%pperSb)%nd- / alg)ritma k%llanm .in! %de -iostream* .in! %de -a gorithm* .in! %de -#%n!tiona * .in! %de -iterator* %sing namespa!e std/ int main( )< int iaC D,<17, 19, 19, 17, 57I/ %nsigned n,sizeo#(ia)Jsizeo#(int)/ !o%t--?UiziH En?/ !op"(ia, ia+n, ostream$iterator-int*(!o%t, = =))/ !o%t--end /!o%t--?19 daha on!e "er ese&i ir?-0%pper$&o%nd(ia, ia+n, 19)--end / !o%t--?59 daha sonra "er ese&i ir?-0%pper$&o%nd(ia, ia+n, 59),,ia+n X =son ogeden? H =XXX?)--end / sort(ia, ia+n, greater-int*( ))/ !o%t--?Uizi = / !op"(ia, ia+n, ostream$iterator-int*(!o%t, = =))/

!o%t--end / !o%t--?19 daha on!e "er ese&i ir?-0%pper$&o%nd(ia, ia+n, 19, greater-int*( ))--end / !o%t--59 daha on!e "er ese&i ir?-0%pper$&o%nd(ia, ia+n, 59, greater-int*( )),,ia X =i k ogeden? H =XXX?)--end / ret%rn 7/ IJJJHK BBretilen ktC =i"iC D@ DH DH E@ F@ DH daha )n&e erlesebilir E@ FH daha s)nra erlesebilir s)n )geden =i"iC F@ E@ DH DH D@ DH daha )n&e erlesebilir D@ FH daha )n&e erlesebilir ilk )geden BB

Bme a goritma ar3


(heap a goritma ar3)
Kme aa biiminde )lan bir di"idir# Standart bir kmede, bir !enin anahtar avr%s%n%n anahtarndan kk )lma"# $% eit kmeler maZ kmeler di e adlandrlr# Sa larn anahtar )ld%%, aadaki ekilde verilen kmenin d"eni* b% aa bir di"ide ! le a"lrC DE, DD, D@, `, R, d, >, D, E, G, F, H 'klamasn verdiimi" b% di"ide, iki tane g!sterge b%l%nd%%n% akln"dan karma n* dm -n)de/ g!sterge bir s)nraki aa dm -n)de/ erini g!sterir, bir avr% -&hild/ g!sterge dm -n)de/ g!sterge&inin avr%s% )lan bir s)nraki !e i iaret eder# $alangta, dm -n)de/ ilk !e i, avr% -&hild/ ise ikin&i !e i iaret eder#

DE DD ` D E G R F D@ d H >

feki 9.:4 Kme !rnei


\\ Wn)de++ -..DE/# DE en stteki dmdr# 9avr%lar ise W&hild-DD/ ve W&hild-D@/ )l%p her ikisi de DE den kktr# \\ $ir s)nraki dm -Wn)de++ -..DD// ve sras ile, W&hild++-`/ ve W&hild++-R/ )n%n avr%lardr# \\ $ir s)nraki dm -Wn)de++ -..D@// ve sras ile, W&hild++-d/ ve W&hild++->/ )n%n avr%lardr# \\ $ir s)nraki dm -Wn)de++ -..`/// ve sras ile, W&hild++-D/ ve W&hild++-E/ )n%n avr%lardr# \\ =aha s)nraki dm -Wn)de++ -..R// ve sras ile, W&hild++-G/ W&hild++-F/ )n%n avr%lardr# \\ Ne s)n )larak -Wn)de++ -..d// ve tek avr%s% W&hild++-H/ &hild di"ideki bir s)nraki !e i iaret ettii iin, geri kalan dmlerde avr% b%l%nmamaktadr# $% "den D, E, G, F, H, ve > dmlerinin avr%s% )kt%r# $%rada bir k)n% % belirtelim* sa ve s)l dallar d"enlenmemitir# `, R dan

kk ama d, > dan b ktr# Kme, iki&i aa& -binar tree/ sevi e d"e inde en stteki dmden bala arak, batan aa geerek )l%t%r%l%r# Tn st dm DE, s+rn& sevi edir# $irin&i sevi ede DD ve DE b%l%n%r# 8kin&i sevi ede ise >, d, `, R b%l%n%r# $% b! le gider### Kmeler -heaps/ kaplarda rastgele eriimi destekle e&ek ekilde )l%t%r%l%r# $% "den kme !rnein* bir liste iinde ina edileme"# Kmeler sras" bir di"iden ina -makeSheap- / k%llanarak/ edilebilir# Tn stteki !e kmeden eniden d"enleme iin alnabilir# $%n%n iin p)pSheap- / ilevi k%llanlr# Kme e eni bir !e de eklenebilir, b%n%n iinde p%shSheap- / ilevi k%llanlr# Ne kmedeki !eler -her ne kadar heap anlamn kaldrsa da/ s)rtSheap- / ilevi ile sra a k)n%labilir# 'adaki b!lmler ba" kme alg)ritmalarn ve b%nlarn k%llanld kk bir !rnei vermektedir#

make$heap( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipleriC ?? v)id makeSheap-]and)m'&&essOterat)r +irst, ]and)m'&&essOterat)r last/* ?? v)id makeSheap-]and)m'&&essOterat)r +irst, ]and)m'&&essOterat)r last, C)mpare &)mp/* 'klamalarC ?? $irin&i !ntipC 0+irst, last/ alanndaki !eler, inele i&inin iaret ettii veri tipinin )perat)r4- / ile&i k%llanlarak, maZ kme -maZ?heap/ )l%t%rmak iin eniden d"enlenir# ?? 8kin&i !ntipC 0+irst, last/ alanndaki !eler, iki&i -binar / karlatrma ilev nesnesi &)mp k%llanlarak, bir kme )l%t%rmak iin eniden d"enlenir#

pop$heap( )
$alk d)s asC

^in&l%de 4alg)rithm5 8lev !ntipleriC ?? v)id p)pSheap-]and)m'&&essOterat)r +irst, ]and)m'&&essOterat)r last/* ?? v)id p)pSheap-]and)m'&&esssOterat)r +irst, ]and)m'&&essOterat)r last, C)mpare &)mp/* 'klamalarC ?? $irin&i !ntipC 0+irst, last/ alanndaki ilk !e last?D e g!nderilir# =aha s)nra 0+irst, last?D/ alanndaki !eler, inele i&inin iaret ettii veri tipinin )perat)r4- / iel&i k%llanlarak, bir maZ kme -maZ?heap/ )l%t%rmak iin eniden d"enlenir# ?? 8kin&i !ntipC 0+irst, last/ alanndaki ilk !e last?D e g!nderilir# =aha s)nra 0+irst, last?D/ alanndaki !eler, iki&i -binar / karlatrma ilev nesnesi &)mp k%llanlarak, bir kme )l%t%rmak iin eniden d"enlenir#

p%sh$heap( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipleriC ?? v)id p%shSheap-]and)m'&&essOterat)r +irst, ]and)m'&&essOterat)r last/* ?? v)id p%shSheap-]and)m'&&essOterat)r +irst, ]and)m'&&essOterat)r last, C)mpare &)mp/* 'klamalarC ??$irin&i !ntipC 0+irst, last?E/ alannda geerli bir kme )ld%%n% kab%l edi )r%", last?D deki !e kme e eklene&ek bir !e i ta )r, ve inele i&ilerin iaret ettii veri tipinin )perat)r4- / ile&i k%llanlarak , 0+irst, last?D/ alanndaki !eler maZ kme -maZ?heap/ )l%t%rmak iin eniden d"enleni )r# ?? 8kin&i !ntipC 0+irst, last?E/ alannda geerli kme )ld%%n% kab%l edi )r%", last?D deki !e kme e eklene&ek !e i ta )r, ve iki&i -binar / karlatrma ilev nesnesi &)mp k%llanlarak, 0+irst, last?D/ alanndaki !eler kme )l%t%rmak iin eniden d"enleni )r#

sort$heap( )
$alk d)s asC ^in&l%de 4alg)rithm5 8lev !ntipleriC ?? v)id s)rtSheap-]and)m'&&essOterat)r +irst, ]and)m'&&essOterat)r last/* ?? v)id s)rtSheap-]and)m'&&essOterat)r +irst, ]and)m'&&essOterat)r last, C)mpare &)mp/* 'klamalarC $irin&i !ntipC 0+irst, last/ alanndaki !elerin maZ kme -maZ?heap/ )ld%%n% kab%l edi )r%", inele i&ilerin iaret ettii veri tipinin )perat)r4- / ile&i k%llanlarak 0+irst, last/ !eleri sra a k)n%r# 8kin&i !ntipC 0+irst, last/ alanndaki !elerin geerli bir kme -heap/ )l%t%rd%%n% kab%l edi )r%", iki&i -binar / karlatrma ilev nesnesi &)mp k%llanlarak, 0+irst, last/ alanndaki !eler sra a k)n%r#

Bme (heap) ]2 ev eri i gi i LrnekH


BBC$@HCk%meler#&pp BBheap ilevlerinin k%llanld .in! %de -iostream* .in! %de -a gorithm* .in! %de -#%n!tiona * .in! %de -iterator* void sho((int0 ia, !har !onst0 header)< stdHH!o%t--header--?HEn?/ stdHH!op"(ia, ia+17, ostream$iterator-int*(stdHH!o%t, = =))/ stdHH!o%t--stdHHend / I %sing namespa!e std/ int main( )< int iaCD,<1, 1, 5, 8, 9, :, F, d, e, 17, 11, 11, 15, 18, 19, 1:, 1F, 1d, 1e, 17I/ make$heap(ia, ia+17)/

sho((ia, =ma'4heap teki 1417 =)/ pop$heap(ia, ia+17)/ sho((ia, =i k oge"i si (simdi sonda)?)/ p%sh$heap(ia, ia+17)/ sho((ia, =17 (en sonda) ek e heap e =)/ sort$heap(ia, ia+17)/ sho((ia, =heap teki oge eri sira a?)/ make$heap(ia, ia+17, greater-int*( ))/ sho((ia, =heap teki 1417 arasi deger er * k% ani di?)/ pop$heap(ia, ia+17, greater-int*( ))/ sho((ia, =i k oge"i si ?)/ p%sh$heap(ia, ia+17, greater-int*( ))/ sho((ia, heap "ine 17 ek e?)/ sort$heap(ia, ia+17, greater-int*( ))/ sho((ia, =heap teki oge eri sira"a ko"?)/ ret%rn 7/ IJJJHK BBretilen ktC maZ?heap teki D?E@ E@ DR DH D` DD DF DG Dd R D@ E DE > F d D> ` G D H ilk )ge i sil -simdi s)nda/ DR D` DH Dd DD DF DG D> R D@ E DE > F d H ` G D E@ E@ -en s)nda/ ekle heap e E@ DR DH Dd D` DF DG D> R DD E DE > F d H ` G D D@ heapteki )geleri sirala D E F G H > d ` R D@ DD DE DF DG DH D> Dd D` DR E@ heap teki D?E@ arasi degerler 5 k%llanildi D E F G H > d ` R D@ DD DE DF DG DH D> Dd D` DR E@ ilk )ge i sil E G F ` H > d D> R D@ DD DE DF DG DH E@ Dd D` DR D heap ine E@ ekle D E F ` G > d D> R H DD DE DF DG DH E@ Dd D` DR D@ heap teki )geleri sira a k) E@ DR D` Dd D> DH DG DF DE DD D@ R ` d > H G F E D BB GdE

a%to$ptr s3n3#3
7!stergelerin k%llanm ile ilgili, C ve C++ dillerinde bir)k e+sane a"lmtr# 3atta g!stergelerin e tan )ld%% k)n%s%nda, epe a" vardr# $%n%n temel nedeni* g!stergeler hatal k%llanldnda bellek kaaklarna )lamalar, sistem !kmelerine neden )lmalar ve s)n )larakta, krakerlerin -%marm biskvi )larak alglamamsn"dr/ akn d)stlar )lmalardr# 7!stergelerin s)r%n aratmamas iin, bellekteki erleri ve !mrleri tam )larak belirlenmelidir# 7!sterge deikeni g!rnt dna tat "aman, g!sterge&in iaret ettii bellek eri artk eriileme" )l%r# Kr)gram da bellek kaa )l%%r# 'adaki !rnek matrak- / ilevinde, matrak- / ilevi arldnda, bellek kaa )l%%r# $%radaki int deeri eriileme" )l%r# void matrak( )< ne( int / I $ellek kaaklarn engelle ebilmek iin, kesin ve ak er belirlemesi aplmaldr# 7!sterge deikeni g!rnt dna kmadan hemen !n&e, g!sterge&in iaret ettii bellek alan m%tlaka silinmelidir# 9%kardaki !rnek bellek kaann )narm, aadaki gibi aplrC void matrak( )< de ete ne( int/ I 'rtk matrak- / ilevi bira" +a"la "aman har&ar ) kadar# $ir g!sterge deikeni tek bir deeri ve a nesne i iaret ettiinde, b% g!sterge deikeni stdCCa%t)Sptr nesnesi )larak tanmland sa, artk si"in b% g!stergele ilgili bellek eri s)r%n%n%" kalmam demektir# '%t)Sptr ler g!sterge klna girmi nesnelerdir# 9ani aslnda )nlar nesne ama si" g!sterge )larak k%llanrsn"# Aesne )ld%klar iin g!rnt dna kldnda derhal k& ilevleri arlr, ilgili bellek eri b)altlr# 9ani

silinir# $% ilem sade&e dinamik )larak erleim aplm bellek erlerine % g%lanr# =inamik bellek k%llanmnn pr)gram alrken k%llanlan bellek )ld%%n% hatrlatalm# a%t)Sptr ler k%llanlmadan !n&e, aadaki !nilemle i&i !nergesi m%tlaka balk d)s alar arasna a"lmaldr# .in! %de -memor"* $ir a%t)Sptr nesnesi, dinamik )larak )l%t%r%lm% bir nesne ve a deer k%llanlarak balatlr - ani ilk der atamas aplr/# '%t)Sptr lere % g%lanan ba" snrlamalar da b%l%nmaktadr, b%nlarC WW a%t)Sptr nesnesi, nesneler di"isini iaret etmek iin k%llanlama"# WW a%t)Sptr nesnesi sade&e dinamik )larak a"lm bellek erleri iin iarette b%l%nabilir, ve sade&e dinamik )larak erlemi )lan bellek erlerini b)altabilir# WW =inamik )larak erlemi )lan a n bellek btnn, birden +a"la sa da a%t)Sptr nesnesinin iaret etmesine i"in verilme"# a%t)Sptr nin ara " - ani sn+ ilevleri/ b%n% engeller# a%t)Sptr nesnesi g!rnt dna kar kma", iaret ettii bellek eri derhal b)altlr# 7!sterge&in kendisine eriebilmek ve a bellek btnnn baka bir erini iaret etmek iin, &lass a%t)Sptr de )k sa da e ilev b%l%n%r# $% e ilevleri ve a%t)Sptr nesnesi )l%t%rma , bira"dan in&ele e&ei"#

a%to$ptr UeGi2ken erinin Pan3m3


a%t)Sptr nesnesi tanmlamann trl )l% vardr# 6anmlarn her birinde 4t pe5 belirte&i b%l%n%r# ' rntl !rneklerini daha s)nra vermek "ere, imdilik sade&e % g%lamalarn !"etini verelimC WW 6emel biim, bellek erleimi ne_ ile&i tara+ndan aplm )lan eri iaret eden, a%t)Sptr nesnesinin balatlmasdr# a%t)Sptr4t pe5 identi+ier -ne_? aklama/* WW 8kin&i biim ise, bir k)p a ap& ilev k%llanarak a%t)Sptr nesnesini

balatmaktr# a%t)Sptr4t pe5 identi+ier -t pe iin baka bir a%t)Sptr/* WW ;n& biim de ise basite )l%t%r%lan a%t)Sptr nesnesi belli bir bellek btnn iaret etme"# a%t)Sptr4t pe5 identi+ier *

Neni Ner e2en Vesnenin ]2aret Sdi mesi


a%t)Sptr nesnesini balatmann, ani ilk deer atamasn apmann basit )l%* ap& ilevini, )perat)r ne_ ile&i ile salanan bellek ile birlikte temin etmektir# 7enel biimC a%t)Sptr4t pe5 identi+ier -ne_? eZpressi)n/* <rnek )larak, bir string nesnesini iaret eden a%t)Sptr i balatmak iin, aadaki biim k%llanlabilirC a%t)Sptr4string5 strKtr-ne_ string -Xselam selami[//* d)%ble deeri iaret eden a%t)Sptr i balatmak iin iseC a%t)Sptr4d)%ble5 dKtr-ne_ d)%ble->HG#FED//* 9%kardaki !rneklerde )perat)r ne_ ile&inin k%llanmna i i&e dikkat edin# ne_ k%llanm, a%t)Sptr nesnelerinin iaret ettii bellek alanlarnn dinamik karakterini gven&e e alr# Ne a%t)Sptr nesnesi g!rnt dna ktnda bellek alann bir ke" b)altr# =ikkat edile&ek baka bir n)kta da t pe n g!sterge )lmaddr# a%t)Sptr inaatnda k%llanlan t pe ne_ ile k%llanlan aklama ile a ndr# K)n%n%n banda verdiimi" matrak- / !rneini imdi daha gvenli a"almC .in! %de -memor"* %sing namespa!e std/ void matrak( )<

a%to$ptr-int* ip(ne( int)/ I ne_ ile&i tara+ndan erletirilen nesneler iin salanan btn e ilevlere a%t)Sptr ara&l ile eriilir, b%rada a%t)Sptr sanki, dinamik )larak erlemi nesne i g!steren, herkesin bildii g!sterge gibi davranr# 'adaki !rnekte ,C++, i+adesi ,selam, kelimesinin ardna erletirilir# BBC$@HCkendi er#&pp BBa%t)Sptr k%llanm .in! %de -iostream* .in! %de -memor"* %sing namespa!e std/ int main( )< a%to$ptr-string* sp(ne( string(=Se am anado %?))/ !o%t--0!p--end / sp4*insert(str en(=Se am?), =C++?)/ !o%t--0sp--end / IJJJHK BBretilen ktC Selam anad)l% Selam C++ BB

Ba2ka &ir a%to$ptr i i2aret etmek


$ir a%t)Sptr a n tipteki baka bir a%t)Sptr nesnesi tara+ndan balatlabilir# 7enel biimC a%t)Sptr4t pe5 identi+ier-baka bir a%t)Sptr nesnesi/* <rnek )larak a%t)Sptr4string5 i balatmak iin, daha !n&e tanm verilen sp deikenini k%llanalm* a%t)Sptr4string5 strKtr-sp/* 'tama ile&i de -./ ben"er ekilde k%llanlabilir# $ir a%t)Sptr nesnesi a n tipteki baka bir a%t)Sptr nesnesine atanabilir# <rnekC

BBC$@HCatamak#&pp BBatama ile&inin k%llanm .in! %de -iostream* .in! %de -memor"* .in! %de -string* %sing namespa!e std/ int main( )< a%to$ptr-string* se am1(ne( string(=Se am anado %?))/ a%to$ptr-string* se am1(se am1)/ a%to$ptr-string* se am5/ se am5,se am1/ !o%t--0se am1--end -0se am1--end -0se am5--end / IJJJHK BBretilen ktC Segmentati)n +a%lt -$ellek para hatas/ BB 9%kardaki !rnei in&elediimi"de g!"e arpanlarC ?? selamD !n&eki !rnee ben"er balatld# ?? =aha s)nra selamE tanmland, ve deerini k)p a ap& ilevle balatarak selamD den ald# $% % g%lama selamD i @?g!sterge&e deitirdi# ?? Ne en s)n )larak selamF, a%t)Sptr4string5 )larak tanmland# 'ma deerini atama ile selamE den ald# 6abii ) da ) "aman @?g!sterge )ld%# Kr)gram bellek para hatas retti# $%n%n sebebi @? g!stergelerin da anlarndan k%rt%lmalardr# Tn s)n%nda aslnda sade&e selamF bir string i iaret eder#

Basit &ir a%to$ptr o %2t%rmak


$ira" !n&e a%t)Sptr )l%t%rmann n& )l%n% g!rmtkC deikenleri

)lmadan, belli bir bellek alann g!sterme en, b) bir a%t)Sptr nesnesi ina edilmiti# a%to$ptr-t"pe* identi#ier / $% d%r%mda temel g!sterge @ -s+r/ a a arlanr# a%t)Sptr nesnesinin kendisi bi""at g!sterge )lmad iin, balatlmadn g!rmek iin @ -s+r/ deeri ile karlatrma aplma"# <rnekC a%to$ptr-int* ip/ i#(+ip) !o%t--?74gosterge!i o an a%to$ptr nesnesi?--end / 6abii, b% herhangi bir kt retme"#

]2 eO er ve "e er
a%t)Sptr sn+ iin tanmlanm )lan ilelerC WW a%t)SptrV a%t)Sptr46 pe5)perat)r.-a%t)Sptr46 pe5V )ther/ C $% ile sa an deer a%t)Sptr nesnesinin belleini, s)l an deer a%t)Sptr nesne belleine aktarr# $%n%n s)n%&%nda sa an deerini g!steren bellek alan deerini ka beder ve @?g!sterge )l%r# WW 6 peV a%t)Sptr46 pe5)perat)rW- / C $% ile a%t)Sptr nesnesinde sakl bilgi e bir da an d!ndrr# =a an&ndan k%rt%lm% ile&in n)rmal g!sterge&i gibi davranr# WW 6 peW a%t)Sptr46 pe5)perat)r?5- / C $% ile a%t)Sptr nesnesinde sakl bilgi e bir g!sterge d!ndrr# $% ile sa esinde, bellekte b%l%nan nesnenin eleri seilebilir# <rnekC a%t)Sptr4string5 sp-ne_ string-Xselam[//* &)%t44sp?5&Sstr- /44endl* a%t)Sptr nesneleri iin aadaki e ilevler tanmlanmtrC WW 6 peW a%t)Sptr46 pe5CCget- /*

$% ilev )perat)r?5- /C ile a n ii g!rr# a%t)Sptr nesnesinde sakl bilgi e bir g!sterge d!ndrr# $% g!sterge iin %nlar s! lenebilirC =eeri eer s+rsa -@/, a%t)Sptr nesnesi herhangi bir bellek alann iaret etmi )r demektir# $% e, a%t)Sptr nesnesinin baka bir bellek btnn iaret etmesine i"in verme"# WW 6 peW a%t)Sptr46 pe5CCrelease- / C $% ilev b)altla&ak bilginin b%l%nd%% a%t)Sptr nesnesine bir g!sterge d!ndrr# -b! le&e ) bellek alan @?g!sterge )l%r/# $% e ilev a%t)Sptr nesnesinde sakl bilgi i, basit 6 pe g!sterge&ine evirmede k%llanlabilir# $% e ilevden d!nen deerin bellek alannn b)altlmas, pr)gram&nn s)r%ml%l%%ndadr, hemen belirtelim# WW v)id a%t)Sptr46 pe5CCreset-6 peW/ C $% ilev a%t)Sptr nesnesinde k%llanlan bellei b)altmak iin deikensi" arlabilir, ve a dinamik )larak erletirilmi bellekler iin g!stergele arlabilir, ve a a%t)Sptr nesnesi tara+ndan eriilen bellekler de k%llanlr# $% e ilev a%t)Sptr nesnesine eni bir belelk alan tamakta k%llanlabilir#

Nap3!3 ]2 ev er ve \LstergeO Aeri "e eri


a%t)Sptr in temel !"ellikleri anlatld, imdi aadaki !rnei ele alalmC BBgereken ^in&l%de lar ! ass Map< stdH.map-string, Uata*0 d$map/ p%& i!H Map(!har !onst0 #i ename) thro((stdHHe'!eption)/ I/ Uap sn+nn ap& ilevi aadaki g!revleri erine getirirC WW $ir stdCCmap nesnesini bellee erletirir# WW 'd ap& ilev deikeni )larak belirtilen bir d)s a aar# WW =)s a )k%r ve map i ) s%retle d)ld%r%r#

6abii d)s a amak mmkn )lmadnda, % g%n bir istisna -eZ&epti)n/ +rlatlr -thr)_/# $! le&e ap& ilev % g%lamas % hali alrC MapHHMap(!har !onst0 #name) H d$map(ne( stdHHmap-stdHHstring, Uata*) thro((stdHHe'!eption)< i#stream istr(#name)/ i#(+istr)< thro( stdHHe'!eption(=dos"a a!i maz?)/ #i Map(istr)/ I Keki b% % g%lamada hata neredeQ# 6emel "a +lk bellek kaann ata )lmasdr# $ellek kaa sade&e istisna +rlatld "aman )l%%r# =ier "amanlar ise ilev hatas" ve mkemmel alr# 8stisna +rlatldnda, map dinamik )larak erleime tabi t%t%lmaktadr# $%n%nla birlikte sn+ k& ilevi delete dSmap i arsa bile, k& ilev aslnda hibir "aman arlma"# 9k& ilev sade&e tam )larak ina edilmi nesneler iin arlr# 9ap&nn g!revi bir istisna ile s)nland iin, ) srada ina edilmekte )lan nesne, tam )larak ina edilmemi demektir# $%ndan d)la k& ilev hibir "aman arlama"# a%t)Sptr ler b% eit s)r%nlar !"mekte de k%llanlabilirler# dSmap i aadaki gibi tanmla almC stdHHa%to$ptr-stdHHmap-stdHHstring, Uata* * -b%rada eri gelmiken bir k)n% % daha belirtelim* bilindii gibi 5 5 eklinde belirtilen g!sterim saa ka ma ile karmasn di e bir aralkla aplmaktadr# Yakat E@@> lnda, standart k)mitesi D# n%maral teknik rap)r%nda -6]# D di e gei )r/ artk b)l%a gerek kalma a&an belirtti, ani 55 ve a 44 ka malarla karma a&ak# E@@d den s)nra pr)gram a"a&aklara bilgi )ls%n dedik/ 'rtk aniden bir nesne e d!nr# (imdi Uap ap&s gvenle istisna +rlatabilir# dSmap in kendisi bir nesnedir, k& ilevi artk tam "amannda ani Uap nesnesi g!rnt dna ktnda g!revini -inaat tamamlanmam )lsa bile/ erine getirir# $%rada ana k%ralC ap& ilevin bir istisna ile g!revini tamamla amamas gibi bir d%r%m s!" k)n%s% )l%rsa, sn+larda g!sterge veri elerinin erinde, basit g!stergeler k%llanma n, a%t)Sptr ler k%llann# Ae miMMM

a%t)Sptr ler istisnai d%r%mlarda si"i madara )lmaktan k%rtarrlar# 3a atta istisnas )lma an hangi d%r%m var "aten Q## S)nra pr)gramm neden alm )r di e "rlama n#

:. BL m ]stisna ar (S'!eptions)
C dili pr)gramn n)rmal akn engelle en istisnalara kar deiik )llarla ardm salamtr# $%nlar* WW 8levle an)rmallii haber verir, ve bir ileti retir# $% b k ihtimalle bir pr)gramn g!sterebile&ei en a" tehlikeli reaksi )nd%r# WW 'n)rmallik g!"lendiinde ilev ) anki g!revi s)nlandrr, )n% arana bir hata k)d% g!nderir# $%, kararlar erteleme ilgili !nemli bir d%r%m )l%p, imdi arlan ilev bir s)r%nla kar kar a demektir# 6abii arlan ilev de ben"er reaksi )n g!sterip arana hata k)d% iletebilir# WW 8lev, denetim dna kan %ns%rlara bakp karar vererek, % g%nsa eZit- / ilevini arp, pr)gram tamamen s)nlandrabilir# $% s)r%n%

!"menin en k!kten )l%d%r# WW 8lev, setemp- / ve l)ngemp- / ilevlerinin bir k)mbinas )n%n% k%llanp, !rel )lma an klara !nelebilir# $% mekani"ma g)t) n%n baka bir eidi )l%p, istisnann )l%t%% )rtamn dnda pr)gramn srmesini salar# $% d%r%m, k%llanlm )lan %val ilevlerden )k sa da geri d!nler )lm%sa, "i aret edilmesi gereken ara sevi eler atlanarak gerekletirilir# C++ dilinde ise, pr)gram akn sakata %ratan d%r%mlarda %kardaki k%llanlan !"m )llar ine geerlidir# $%n%nla birlikte baka seeneklerde b%l%n%r# <rnek )larak* setemp- / ve l)ngemp- / k)mbinas )nlarna C++ -aslnda C de de sk rastlanma"/ dilinde pek rastlanma"# :ira ) "aman pr)gram ak tamamen kesinti e %rar# C++ dili b%nlarn erine istisnalar -eZ&epti)ns/ k%llanma s%nar# 8stisnalar, C++ pr)gramlarna denetlenebilir !rel )lma an geri d!nleri salar# $! le&e l)ngemp- / ve setemp- / sakn&alar )rtadan kalkar# 8stisnalar, ilevin kendisi tara+ndan !"mleneme en d%r%mlardan k%rt%lmann en % g%n )l%d%r# <"ellikle, bir pr)gram tamamen s)nlandrmak iin tam !knt )rta a kmad d%r%mlarda# $tn b%nlarn annda, istisnalar ksa ret%rn -geri d!n/ ile kaba eZit -k/ arasnda esnek bir aralk salar# $% b!lmde istisnalar ve a"m biimleri irdelene&ek#

]stisna ar3n k% an3m3H "az3m LGe eri


8stisnalarla birlikte aadaki a"m !eleri k%llanlrC WW tr C tr bl)% istisnalar reten de imleri -b%nlar +rlatla&ak istisnalardr/ kapsar# <rnekC tr"< JJistisna ar3n #3r at3 a!aG3 de"im er I WW thr)_C belli bir tipte aklama tara+ndan takip edilir, istisna )larak kab%l edilen aklamann deerini +rlatr# thr)_ de imi tr bl)%n%n iinde m%tlaka altrlmaldrC a d)r%dan, ve a d)r%dan arlan bir ilev iinde, a da tr bl)%ndan d)la l

)larak# <rnekC thro( =B% &ir !har0 istisnas3 retir? / WW &at&hC tr bl)%n%n hemen ardndan gelir, &at&h bl)% +rlatlan istisnalar akalar# &harW istisnalarn alan &at&h bl)% !rneiC !at!h (!har0 message)< JJ#3r at3 an !har0 istisna ar3n3 "Lneten de"im eri I

]stisna ar3n k% an3 d3G3 Lrnek


6akip eden iki b!lmde a n basit pr)gram k%llana&a"# Kr)gramda O%ter ve Onner isimli iki sn+ b%l%nmaktadr# main- / ilevinde O%ter nesnesi )l%t%r%l%r, ve O%terCC+%n- / esi arlr# =aha s)nra O%terCC+%n- / da bir Onner nesnesi )l%t%r%l%r# Onner nesnesi )l%t%r%l%n&a OnnerCC+%n- / esi arlr# (imdi here in ilgili )ld%% ere gelelim# O%terCC+%n- / ilevi s)nlanr, Onner nesnesinin k& ilevi arlr# =aha s)nra pr)gram s)nlanr, O%ter nesnesinin k& ilevi arlr# 8te pr)gramC BBC$@>Cistisna#&pp BB!rnek alma .in! %de -iostream* %sing namespa!e std/ ! ass ;nner< p%& i!H ;nner( )/ K;nner( ), void #%n( )/ I/ ! ass `%ter< p%& i!H `%ter( )/ K`%ter( )/ void #%n( )/ I/

;nnerHH;nner( )< !o%t--?;nner !onstr%!torEn?/ I ;nnerHHK;nner( )< !o%t--?;nner destr%!torEn?/ I void ;nnerHH#%n( )< !o%t--?;nner #%nEn?/ I `%terHH`%ter( )< !o%t--?`%ter !onstr%!torEn?/ I `%terHHK`%ter( )< !o%t--?`%ter destr%!torEn?/ I void `%terHH#%n( )< ;nner in/ !o%t--?`%ter #%nEn?/ in.#%n( )/ I int main( )< `%ter o%t/ o%t.#%n( )/ IJJJHK BBretilen ktC O%ter &)nstr%&t)r Onner &)nstr%&t)r O%ter +%n Onner +%n Onner destr%&t)r O%ter destr%&t)r BB 9%kardaki pr)gram derlenip altrld "aman, here in beklendii gibi ilerledii g!rle&ektir# 9ani k& ilevler ap& ilevlerin arlma srasnn tersine arla&aklardr# (imdi k)n%m%"la ilgili )ls%n di e, main- / ilevinin s)n tara+larnda er alan, OnnerCC+%n- / ilevinde tam !knt aratma an bir )la )ld%%n% +ar" edelim# 8ki d%r%m% irdele elim# $irin&isinde, b% d%r%m% !netmek iin setemp- / ve l)ngemp- / ilevlerini k%llanalm, ikin&isinde ise C++

dilinin istisnalarn -eZ&epti)ns/ k%llanalm#

setQmp( ) ve ongQmp( ) deGi2im eri


setemp- / ve l)ngemp- / ilevlerini, !n&eki b!lmde verilen basit pr)gramda k%llanabilmek iin, pr)gram empSb%+ empb%+ deikenini iere&ek ekilde bira" deitirilir# OnnerCC+%n- / ilevi l)nemp i arr, main- / ilevinin s)n%nda k%llanmak iin, bir !knt )la nn ben"eri )l%t%r%l%r# main- / ilevinde l)ng sra n erini tanmlamak iin setemp- / ilevi k%llanlr# S+r geri d!n deeri, arlan O%terCC+%n- / ilevine g!re e%mpSb%+ deikeninin balatln belirtir# $% d%r%m ,n)rmal ak, temsil eder# !knt )la nn ben"erini tamamlarken, pr)gramn d!n deerinin s+r )lmas iin an&ak pr)gramn O%terCC+%n- / ilevinden n)rmal )larak d!nebilmesi la"mdr# $%n%nla birlikte bi" bili )r%" ki* b% )lma", OnnerCC+%n- / l)ngemp- / arr, setemp- / ilevine d!ner, b% srada s+r d!n deeri d!nme"# $! le&e, O%terC#+%n- / dan OnnerCC+%n- / ilevi arldktan s)nra, pr)gram main- / ilevindeki i+ de iminin !tesine ilerler, Ne pr)gram D -bir/ d!n deeri ile s)nlanr# (imdi aadaki ka nak pr)gram adm adm in&ele erek, daha !n&eki b!lmde verilen temel pr)gramda deiiklikler apalm# BBC$@>Chatalar#&pp BBsetemp ve l)ngemp k%llanm .in! %de -iostream* .in! %de -setQmp.h* .in! %de -!std i&* %sing namespa!e std/ ! ass ;nner< p%& i!H ;nner( )/ K;nner( )/ void #%n( )/ I/ ! ass `%ter< p%& i!H `%ter( )/ K`%ter( )/

void #%n( )/ I/ Qmp$&%# QmpB%#/ ;nnerHH;nner( )< !o%t--?;nner !onstr%!torEn?/ I void ;nnerHH#%n( )< !o%t--?;nner #%n( )En?/ ongQmp(QmpB%#, 7)/ I ;nnerHHK;nner( )< !o%t--?;nner destr%!torEn?/ I `%terHH`%ter( )< !o%t--?`%ter !onstr%!torEn?/ I `%terHHK`%ter( )< !o%t--?`%ter destr%!torEn?/ I void `%terHH#%n( )< ;nner in/ !o%t--?`%ter #%nEn?/ in.#%n( )/ I int main( )< `%ter o%t/ i#(+setQmp(QmpB%#))< o%t.#%n( )/ ret%rn 7/ I ret%rn 1/ IJJJHK BBretilen ktC O%ter &)nstr%&t)r Onner &)nstr%&t)r O%ter +%n Onner +%n- / O%ter destr%&t)r BB

Kr)gramn ktsndan da aka g!rld "ere Onner sn+nn, k& ilevi altrlmamtr# 9ani nesnelerin k& ilevleri, setemp- / ve l)ngemp- / k%llanlarak k)la lkla atlanabilir#

Ba2ka &ir ter!ihH ]stisna ar (e'!eptions)


C++ dilinde, setemp- / ve l)ngemp- / lerin en i i alternati+i istisnalardr, ani eZ&epti)ns# $% b!lmde istisnalarn k%llanlld bir !rnekle k)n% % anlata&a"# 9ine daha !n&e anlatlan basit pr)gramla ie bala a&a"C BBC$@>Cistisna#&pp BBeZ&epti)n larn k%llanm .in! %de -iostream* %sing namespa!e std/ ! ass ;nner< p%& i!H ;nner( )/ K;nner( )/ void #%n( )/ I/ ! ass `%ter< p%& i!H `%ter( )/ K`%ter( )/ void #%n( )/ I/ ;nnerHH;nner( )< !o%t--?;nner !onstr%!torEn?/ I ;nnerHHK;nner( )< !o%t--?;nner destr%!torEn?/ I void ;nnerHH#%n( )< !o%t--?;nner #%nEn?/ thro( 1/ !o%t--?&% de"im !a ismazEn?/ I

`%terHH`%ter( )< !o%t--?`%ter !onstr%!torEn?/ I `%terHHK`%ter( )< !o%t--?`%ter destr%!torEn?/ I void `%terHH#%n( )< ;nner in/ !o%t--?`%ter #%nEn?/ in.#%n( )/ I int main( )< `%ter o%t/ tr"< `%t.#%n( )/ I !at!h (.... )< I IJJJHK BBretilen ktC O%ter &)nstr%&t)r Onner &)nstr%&t)r O%ter +%n Onner +%n Onner destr%&t)r O%ter destr%&t)r BB $% pr)gramda, bir !n&eki pr)gramn l)nemp- / k%llanlan erinde, bir istisna -eZ&epti)n/ +rlatlr# <n&eki pr)gramn karlatrma aplmas iin k%llanlan setemp- / ars erine de, b%rada tr ve &at&h bl)klar er alr# 6r bl)% istisnalarn +rlatld de imleri -ilev arlar da dahil/ k%atr, &at&th bl)% ise istisnalar +rlatldktan s)nra altrla&ak de imleri kapsar# $ir !n&eki !rnekle karlatrla&ak )l%rsa* OnnerCC+%n- /, bir istisna ile l)ngemp- / arsndan daha +a"las )lsa bile, s)nlanr# 8stisna main- / ilevinde akalanr, ve pr)gram s)nlanr# (% anki pr)gramn kts in&elenirse, O%terCC+%n- / iinde )l%t%r%lan Onner nesne k& ilevi, artk d)r% ekilde arlr# OnnerCC+%n- / ilevinin almas thr)_ de imleri

arasnda s)nlanrC thr)_ de iminin hemen !tesinde b%l%nan &)%t a erletirilen metin g!rlme"# 8sitisnalar iin itahn" arttn dn )r%", "ira g!rld kiC WW 8stisnalar pr)gram tamamen s)nlandrmadan ve ardarda ret%rn de imleri gerekmeden, pr)gramn n)rmal aknn dna klmasn salar# WW 8stisnalar k& ilevlerin etkinliini kaldrma", b% "den setemp- / ve l)ngemp- / ilevlerinin erine ter&ih edilirler#

]stisna ar3n #3r at3 mas3


8stisnalar thr)_ de iminin iinde er alabilir# 6hr)_ anahtar kelimesi belli bir tipin deerini alan bir aklama tara+ndan takip edilir# <rnekC thro( =Se am Se ami? * BBbir &harW +rlatr thro( ee / BBbir int +rlatr thro( string(=Se am?)/ BBbir string +rlatr 8levlerde !rel )larak tanmlanm nesneler b% ilevler tara+ndan istisnalar +rlatldnda kendiliinden bir ke" silinir, ilevi terkederler# $%n%nla birlikte eer nesnenin kendisi +rlatlrsa, istisna akala &s +rlatlan nesnenin bir k)p asn alr# $% k)p a, !rel nesne silinmeden hemen !n&e ina edilir# $ir s)nraki !rnek ite b% n)kta a parmak basa&ak# Obee&tCC+%n- / iinde +rlatmak iin !rel bir nesne )l%t%r%la&ak, ki b% s)nra istisna )larak +rlatla&ak# 8stisna, Obee&tCC+%n- / dnda, main- / ilevinde akalana&ak# $% n)ktada +rlatlan nesne herhangi bir erde g!rlme e&ek# (imdi gelelim ka nak k)daC BBC$@>Cnesneistisna#&pp BB+rlatlan nesne .in! %de -iostream* .in! %de -string* %sing namespa!e std/ ! ass `&Qe!t< string d$name/ p%& i!H

`&Qe!t(string name) H d$name(name)< !o%t--?`&Qe!t !onstr%!tor o# =--d$name--?En?/ I `&Qe!t(`&Qe!t !onst6 other) H d$name(other.d$name+? (!op")?)< !o%t--?Cop" !onstr%!tor #or =--d$name--?En?/ I K`&Qe!t( )< !o%t--?`&Qe!t destr%!tor o# =--d$name--?En?/ I void #%n( )< `&Qe!t toPhro((=) o!a o&Qe!t)?)/ !o%t--?`&Qe!t #%n( ) o# =--d$name--?En?/ thro( toPhro(/ I void se am( )< !o%t--?se am =--d$name--?En?/ I I/ int main( )< `&Qe!t o%t(=)main o&Qe!t)?)/ tr"< o%t.#%n( )/ I !at!h (`&Qe!t o)< !o%t--?Naka anan istisna En?/ o.se am( )/ I IJJJHK BBretilen ktC Obee&t &)nstr%&t)r )+ ,main )bee&t, Obee&t &)nstr%&t)r )+ ,l)&al )bee&t, Obee&t ,+%n- / )+ ,main )bee&t, C)p &)nstr%&t)r +)r ,l)&al )bee&t, -&)p / Obee&t destr%&t)r )+ ,l)&al )bee&t, C)p &)nstr%&t)r +)r ,l)&al )bee&t, -&)p / -&)p / 9akalanan istisna Selam ,l)&al )bee&t, -&)p / -&)p / Obee&t destr%&t)r )+ ,l)&al )bee&t, -&)p / -&)p / Obee&t destr%&t)r )+ ,l)&al )bee&t, -&)p / Obee&t destr%&t)r )+ ,main )bee&t,

BB Obee&t sn+ basit birka ap& ilev ve eler tanmlar# K)p a ap& ilev ise, alnan isme X &)p [ ekler# Ne b%, nesnelerin inasn ve klmalarn - ani silinmelerinde/, )k daha akndan g!rmemi"i salar# 8stisna Obee&tCC+%n- / e ilevi retir, ve !rel tanmlanm nesnesini +rlatr# 8stisna +rlatmadan bira" !n&e pr)gram aadaki kt retirC `&Qe!t !onstr%!tor o# )main o&Qe!t) `&Qe!t !onstr%!tor o# ) o!a o&Qe!t) `&Qe!t #%n( ) o# )main o&Qe!t) (imdi istisna retilir ve pr)gramdan aadaki kt elde edilirC Cop" !onstr%!tor #or ) o!a o&Qe!t) (!op") thr)_ &mlesi !rel nesne i alr, ve )n% deiken deeri )larak ilemler* ani !rel nesnenin bir k)p asn )l%t%r%r# $%n% takiben istisna ilemlenir, !rel nesne imha edilir - ani silinir/, akala & -&at&her/ bir Obee&t akalar, ve ine bir deer deikeni# $! le&e baka bir k)p a )l%%r# =aha s)nra aadaki satrlar g!rr"C `&Qe!t destr%!tor o# ) o!a o&Qe!t) Cop" !onstr%!tor #or ) o!a o&Qe!t) (!op") (!op") (imdi artk akala &nn -&at&her/ iinde i"aadaki ileti i g!rr"C 9akalanan istisna 'lnan nesnenin selam- / esinin ars takip eder# $%radan da g!rdm"C Obee&tCC+%n- / e ilev !rel nesnesinin k)p asnn k)p as dr# Se am ) o!a o&Qe!t) (!op") (!op") Aeti&ede pr)gram s)nlanr, ve hala )l%t%r%ld%%n%n tersi sralamada siline&ek )lan &anl nesneler b%l%nmaktadr# `&Qe!t destr%!tor o# ) o!a o&Qe!t) (!op") (!op")

`&Qe!t destr%!tor o# ) o!a o&Qe!t) (!op") `&Qe!t destr%!tor o# )main o&Qe!t) Ter akala & nesne e da an ala&ak ekilde % g%lansa d - ani ,&at&h -Obee&tV )/,/, ) "aman k)p a ap& ilevin tekrarlanan arlarndan saknlm )l%rd%# O d%r%mda pr)gramn ktsC `&Qe!t !onstr%!tor o# )main o&Qe!t) `&Qe!t !onstr%!tor o# ) o!a o&Qe!t) `&Qe!t #%n( ) o# )main o&Qe!t) Cop" !onstr%!tor #or ) o!a o&Qe!t) (!op") `&Qe!t destr%!tor o# ) o!a o&Qe!t) Naka anan istisna Se am ) o!a o&Qe!t) (!op") `&Qe!t destr%!tor o# ) o!a o&Qe!t) (!op") `&Qe!t destr%!tor o# )main o&Qe!t) $%n%n bi"e g!sterdii, !rel nesnenin sade&e bir k)p as k%llanlmaktadr# 6abii, !rel )larak tanmlanm bir nesne e g!sterge +rlatmak k!t bir +ikirdir* g!sterge +rlatlr, ama istisna +rlatldnda g!sterge&in iaret ettii nesne bir ke" !lr, ve akala & kaba g!sterge&i akalar, ani k!t haberler ### <"etleC WW 9!rel nesneler k)p alanm nesneler )larak +rlatlr# WW 9!rel nesnelerin g!stergeleri +rlatlmamas la"m# WW $%n%nla birlikte, dinamik )larak retilmi )lan nesnelerin g!sterge ve a da anlarn +rlatmalar mmkndr# $% d%r%mda istisna akalandnda, bellek kaan engellemek iin, dinamik retilen nesne % g%n ekilde )rtadan kaldrlmaldr - ani silinmelidir/# $ir ilev g!revini n)rmal ekilde devam ettiremedii "aman, pr)gram hala devam etse bile, istisnalarn +rlatlmalar "aman geldi demektir# Ttkileimli hesap makinesini dnelim# Kr)gram daha s)nra hesaplamak iin, srekli )larak aklamalar ister# $% d%r%mda aklamann derle i&i e % g%n paralanmas -parsing/ a"m hatalar ierebilirC ve aklamann hesaplamas mmkn )lma", b%na !rnek )larak* aklamann s+ra b!lnmesi d%r%m% gibi# ' r&a* hesapla & deikenlerin k%llanlmasna i"in verir, ve k%llan& )lma an deikenlere at+ta b%l%n%r* istisnalarn +rlatlmas iin )k sa da sebep )rta a kar, ama pr)gram s)nlandrmak

iin b)%&% bir neden )lma"# Kr)gramda aadaki k)dlar istisnalar +rlatmak iin k%llanabilirsini"* i#(+parse(e'pressionB%##er)) BBparalama )k

thro( =aO3k amada "az3m hatas3?/ i#(+ ook%p(varia& eVame)) JBdeiken b%l%namad thro( =deGi2ken tan3m anmad3?/ i#(+divisionB"bero( )) BBmmkn )lma an b!lm thro( =s3#3ra &L m tan3m anmam32t3r?/ $% thr)_ de imlerinin erleimi d%r%ma g!re deiir* pr)gramn iinde derinlerde %val ekilde, ve a daha st d"e de erletirilir# =aha da +a"las, +rlatla&ak aklamalar retmek iin ilevler k%llanlabilir# 'adaki ilev ben"eri* !har !onst0 #ormatMessage(!har !onst0 #mt, .... )/ )k daha !"gn iletiler g!nderilmesini salar* i#(+ ook%p(varia& eVame)) thro( #ormatMessage(=Aaria& e )Ys) tan3m anmad3?, varia& eVame)/ gibi#

Bo2 )thro() de"imi


$a" d%r%mlarda, +rlatlan thr)_ de iminin gereklilii in&elenir# $% d%r%mda alnan istisnann d)asna bakarak pr)gramn devamna, ve a daha &iddi bir davran g!sterilip, pr)gramn d%rd%r%lmas )l%na gidilir# S%n%&%?istem&i % g%lamalarnda istem&i s%n%&% a dileklerini k% r%a -g%e%e/ erletirerek bildirir# K% r%a erletirilen her dilek, s%n%&% tara+ndan a dilein baar ile tamamland, ve a ba" hatalarn )rta a kt istem&i e bildirilerek antlanr# 'slnda s%n%&% !lm )labilir, ani artk hi ant vereme" d%r%mda )labilir, b% d%r%mda istem&i b% +elaketi ke+edebilmelidir, b! le&e anlams" ekilde s%n%&%n%n ant vermesi iin

beklemek gerekme"# $! le "amanlarda )rta katmanda bir istisna !neti&isi devre e girer# Yrlatlan istisna !n&e )rta katmanda in&elenir# Umkn )l%rsa )rada ilem srdrlr# 8stisnann )rta katmanda ilemlenmesi mmkn )lma"sa, deitirilmeden, daha st sevi eli sert istisna !netiminin gerekletirildii ere aktarlr# 8stisna !netiminin apld k)da, b) bir thr)_ de iminin erletirilmesi ile, alnan istisnann bir s)nraki sevi e e aktarlp !"el istisna tipi )larak ilemlenmesi salanr# S%n%&% ve istem&imi"deki ilevC ;nitia S'!eptioncand er(!har0 e'!eption) eklinde tasarlanmaldr# 'lnan ileti in&elenir# $asit bir ileti ise, ilemlenir# 9)k deilse, bir st d"e e aktarlr# OnitialTZ&epti)n3andler- / ilevinde b) bir thr)_ de imi b%l%n%rC void ;nitia S'!eptioncand er(!har0 e'!eption)< i#(+p ainMessage(e'!eption)) thro(/ hand ePheMessage(e'!eption)/ I $ira"dan g!re&eimi" gibi, b) thr)_ iletisi &at&h bl)%n&a alnan istisna a aktarlr# $%ndan d)la , initialTZ&epti)n3andler- / ben"eri bir ilev, ilevin deikeni alnan aklamann karakteri ile % %ml% )ld%% sre&e, +rlatlan istisnann bir eidi iin k%llanlabilir# Aasl si"e bira" ilgin geldimiQ# $ir s)nraki !rnee bakarsan" g!re&eksini" ki b% k)n% )kbiimlilikle ilgili# )kbiimlilik D# kitabm"da nesne !nelimli paradigmann )lma"sa )lma"lar arasnda d# 8lk kitabm"da )kbiimlilik btn a rntlar ile anlatld iin, b%rada tekrarlama a gerek g!rm )r%"# 'rtk !"el istisnalarn tretildii, temel istisna !netim sn+n ina edebiliri"# $ir TZ&epti)n sn+m"n )ld%%n% kab%l edelim, ve b% sn+ TZ&epti)n6 pe TZ&epti)nCCseverit - / e ilevine sahip )ls%n# $% e ilev bi"e, +rlatlan aklamann sertlik dere&esini bildirsin# $%nlar* 8leti -Uessage/, U ar -barning/, 9anllk -Uistake/, 3ata -Trr)r/, ve a Yelaket -Yatal/ )ls%n# $%nlara ilaveten, sertliin dere&esine bal )larak +rlatlan aklama, pr)&ess- / ilevin&e gerekletirile&ek ilem hakknda

a" a da )k bilgi iersin# $%na ek )larak, btn istisnalarda e ilevler reten -!rnek t)String- // basit metinler b%l%n%r# $% metinlerde, retilen istisnalar hakknda bir miktar bilgi b%l%n%r# pr)&ess- / ilevi, temel TZ&epti)n g!sterge&i ve a da an& arldnda, +rlatlan istisnann karakterine bal )larak, )kbiimlilik k%llanlarak +arkl davranlar g!stermesi salanr# $% d%r%mda, pr)gram be istisna tipinden herhangi birini +rlatr# (imdi initialTZ&epti)n3andler- / ilevimi"in Uessage ve barning istisnalarn ilemlediini kab%l edelim# O "aman k)d%m%" ald ekil* void initia S'!eptioncand er(S'!eption !onst0 e)< !o%t--e4*toString( )--end / JJ&asit metin &i gisi i#(e4*severit"( )+,S'!eptionRarning 66 e4*severit"( )+,S'!eptionRarning) thro(/ JJdiGer istisna ara aktar e4*pro!ess( )/ JJ i eti"i ve"a %"ar3"3 i2 em e de ete e/ I )kbiimlilikten d)la , e?5pr)&ess- / a Uessage a da barning s)n%&%n% retir# 'adaki istisnalar +rlatlrC thro( ne( Message(-arg%ments*)/ thro( ne( Rarning(-arg%ments*)/ thro( ne( Mistake(-arg%ments*)/ thro( ne( Srror(-arg%ments*)/ thro( ne( aata (-arg%ments*)/ 9%kardaki btn istisnalar initialTZ&epti)n3andler- / tara+ndan ilemlenebilir# 9ani, a istisnann kendisi ilemlenir a da, istisna daha st sevi elere g!nderilir# )kbiimliliin k%llanld istisna sn+n da artk si" gelitirin#

Pr"

6r bl)%, +rlatlabile&ek istisnalar ieren de imleri k%atr# 7!rle&ei "ere asl tr de imi her ere k)nabilir, ani d)r%dan tr bl)%nda )lmas art deildir# 6r bl)%ndan arlan bir ilevin iinde de )labilir# 6r anahtar kelimesini bir gr%p "in&irli a ra takip eder, ve a ralara arasnda )k sa da de im ve tanmlar b%l%n%r, ani a n C++ bileik de imleri gibi# 8stisnalar +rlatmak iin - a gn )larak/ deiik sevi eler )l%t%r%l%r# <rnek )larak main- / ilevinin tr bl)% ile k%atld d%r%m# $%rada d katman )l%t%rarak istisnalar !netilebilir# main- / ilevinin kendi tr bl)%n%n iinde, daha st d"e de istisnalar reten tr bl)klar b%l%nd%ran ilevler arlabilir# <n&e de anlatld "ere, daha i ksmlardaki tr bl)klarndaki istisnalar, ) sevi elerde a ilemlenir ve a ilemlenme"# 8stisna !neti&isine b) bir tr erletirerek, +rlatlan istisna bir st -d/ sevi e e aktarlabilir# $ir istisna herhangi bir tr bl)%n%n dna +rlatlrsa, ) "aman istisna !netiminde varsa lan )l - akalanma an/ k%llanlr, ani n)rmal )larak pr)gram terkedilir# (imdi aadaki pr)gram a"n derle in ve altrn, bakalm ne )la&akQ# BBC$@>C+irlat#&pp BBbak bakalm ne )la&ak int main( )< thro( =se am?/ IJJJHK

]stisna ar3n Naka anmas3


&at&h bl)% istisna +rlatld "aman alan k)dlar kapsar# 'klamalar +rlatld iin, &at&h bl)% ne eit istisnalar !nete&eini bilmek ")r%ndadr# $%ndan d)la &at&h anahtar kelimesini bir deiken listesi takip eder, tabii b%nlardan biri &at&h bl)%n%n !nete&ei istisnann tipidir# &har &)nstW istisnalarn !neten bir istisna !neti&isi, aadaki gibi g!sterilebilir* !at!h (!har !onst0 message)< JJi eti"i "Lneten kod ar3 I

=aha !n&e g!rmtk, b! le bir ileti statik string )larak +rlatlmak ")r%nda deildir# $ir ilev istisna )larak +rlatla&ak bir string d!ndrebilir# Ter b! le bir ilev dinamik +rlatlan istisna stringi )l%t%r%rsa, istisna !neti&isi n)rmal )larak k%llanlan bellek alann, bellek kaa )lmamas iin, b)altr# 8stisna !net&isinin deikenlerinin karakterine eterli dere&ede dikkatle baklrsa, dinamik retilen istisnalar ilemlendikten s)nra bir ke" silinirler# 6abii istisna eer d katmandaki istisna !neti&isine aktarlrsa, alnan istisna i katmandaki istisna !neti&isi tara+ndan silinmemelidir# Yarkl istisna eidi +rlatlabilirC&harW s, int ler, nesnelerin g!stergeleri da anlar vs## $tn b% +arkl tipler istisnalarn +rlatlmasnda ve akalanmasnda k%llanlabilir# $! le&e deiik tipte istisnalar tr bl)%n%n dna kabilir# 6r bl)%ndan gelen btn istisnalar akalamak iin )k sa da istisna !neti&isi - ani &at&h bl)klar/ tr bl)%n%n ardndan gelmelidir# 8stisna !neti&isinin d"eni )ld%ka !nemlidir# $ir istisna +rlatldnda +rlatlan istisnann tipine % an ilk istisna !neti&isi k%llanlr, s)nra gelen istisna !neti&ileri g!"ard edilir# $! le&e tr bl)%n% takip eden sade&e bir istisna !neti&isi altrlr# S)n% )larak istisna !neti&ileri, en !"el deikenlere sahip )lanlardan, daha genel deikenlere sahip )lanlara d)r% erletirilmelidirler# <rnek )larak* istisna !neti&ileri eer &harW s ve v)idW s - ani eski tip g!sterge/ ile tanmlanrlarsa, ) "aman ilk istisna tipi - ani &harW s/ iin )lan istisna !neti&isi daha s)nraki tipin -v)idW s/ istisna !neti&isinden !n&e erletirilirC tr"< JJ&tn gLstergeO Oe2it erini #3r at I !at!h (!har !onst0 i eti)< JJ#3r at3 an !har gLstergeO eri i2 em enir I !at!h (void0 ne"sene)< JJ&tn Lteki #3r at3 an gLstergeO eri i2 em er I Yarkl tiplerdeki istisnalarn +arkl istisna !neti&ilerini ina etmek iin baka bir seenek )larak* nesneleri istisna hakknda bilgi b%l%nd%ran !"el

bir sn+ tasarlanabilir# $! le bir aklam gemi b!lmlerden birinde anlatlmt# $% aklam k%llanld "aman sade&e bir !neti&i e gerek d% %l%r, "ira istisnann !br tiplerini +rlatma a&am" bili )r%"# tr"< JJsade!e istisna (S'!eption) gLstergeO erini #3r atan kod ar3I I !at!h (S'!eption0 e)< e4*pro!ess( )/ de ete e/ I 9%kardaki delete e de imi istisnann dinamik )larak )l%t%%n% g!stermektedir# 8stisna !neti&i k)dlarnn !tesine erlemi )lan tr bl)% ilemlendii "aman, pr)gramn almas tr bl)%n% takip eden s)n istisna !neti&isinin !tesine kadar srer# -tabii !neti&i ret%rn, thr)_ ve a eZit- / gibi ilevlerle )rtamdan kmad sa/# $%ndan d)la aadaki +arkl d%r%mlarla karlar"C WW tr bl)%n%n iinden herhangi bir istisna +rlatlmad sa, hibir istisna !neti&isi etkinleme", pr)gramn almas tr bl)%n%n s)n de iminden s)n &at&h bl)%n%n !tesindeki ilk de ime srer# WW tr bl)%ndan bir istisna +rlatld sa, ama ) an ki katmanda ve a daha s)nraki katmanlarda % g%n bir istisna !neti&isi b%l%nm% )rsa, pr)gramn varsa lan !neti&isi arlr, b% genellikle pr)gramn terki eklinde )l%r# WW tr bl)%ndan bir istisna +rlatld sa ve % g%n bir istisna !neti&isi varsa, istisna !neti&isinin k)d% ilemlenir# 8stisna !neti&i k)d%n%n almasn takiben, pr)gramn almas &at&h bl)% s)n de iminin !tesindeki ilk de imde srer# alan bir tr bl)%n%n altnda er alan tr bl)%ndaki de imlerin hibiri dikkate alnma"# $%n%nla birlikte, tr bl)%nda !rel )larak tanmlanm nesnelerin k& ilevleri, herhangi bir istisna !neti&isinin k)dlar ilemlenmeden arlr# 8stisna inas ve a asl hesaplamas, i iletirmenin deiik dere&eleri k%llanlarak gerekletirilir# <rnein* ne_ ile&iniC bir sn+n statik e ilevlerini* bir nesne g!sterge&i d!ndrmei* bir sn+tan tretilmi sn+larn nesnelerini* )kbiimlilii, k%llanmak mmkndr#

Aarsa"3 an Naka a"3!3


Yarkl tiplerde istisnalarn +rlatlabildii d%r%mlarda, pr)gramn belli d"e lerinde sade&e snrl sa da !neti&i istenir# $! le&e snrl sa daki !neti&ilere ait )lan istisna tipleri ilemlenir, !teki istisna tipleri ise daha st d"e dardaki istisna !neti&ilerine aktarlr# 8stisna !netiminin ara katmannda er alanlar ise, varsa lan istisna !neti&isi tara+ndan ilemlenir# -b% ilem istisna !neti&ilerinin hi erarik aplanmasna g!re belirlenir/# <"el tipteki istisna !neti&ilerinin hemen !tesinde er alrlar# $% d%r%mda istisna !netiminin ) an ki sevi esinde ba" e ler varsa arak gerekletirilir, ama daha s)nra b) thr)_ de imi k%llanlr, +rlatlan istisna d katmana g!nderilir# (imdi varsa lan istisna !neti&isinin k%llanld bir !rnek verelim* BBC$@>Cvarsa #&pp BBvarsa lan istisna !neti&isi .in! %de -iostream* %sing namespa!e std/ int main( )< tr"< tr"< thro( 11.19/ JJdo%& e iOin &e i &ir "Lneti!i "ok !at!h (!har !onst0 message)< !o%t--?;nner eve H "aka anan !har !onst0 En/ I !at!h (int va %e)< !o%t--?;nner eve H "aka anan intEn?/ I !at!h (... )< !o%t--?;nner eve H istisnanin generi! k% animiEn?/ thro(/ I !at!h (do%& e d)< !o%t--?`%ter eve do%& e o arak &i irH =--d--end / I IJJJHK

BBretilen ktC Onner levelC istisnann generi& k%llanimi O%ter level d)%ble )larak bilirC DE#EH BB <rnekten de g!rdm" gibi* b) thr)_ de imi, alnan istisna tip ve deerini k)r% arak bir s)nraki sevi ede -d katmanda/ b%l%nan istisna akala &sna +rlatrC temel ve a belli bir kalba % g%n istisna !netimi i sevi ede baarlabilir, ama !"gn istisna !netimleri +rlatlan istisnann tipine aslanarak, daha s)nra d katmanlarda gereklenir#

]stisna #3r at3!3 ar3n3n &i dirimi


3erhangi bir erde tanmlanm ilevler, ine b% ilevler k%llanlarak k)d ile iliimlenir# $% tr ilevler n)rmal de, a tek balarna ilev )larak ada sn+ e ilevleri )larak balk d)s alarnda bildirilir# 6abii d ilevler de istisna +rlatabilirler# $% tr ilevlerin bildirimlerinde ilev +rlatm listesi ve a istisna tantm listesi b%l%n%r# $% listelerde ilev tara+ndan +rlatlan istisnalarn tipleri belirtilir# <rnek )larak &harW ve int istisnalar +rlatan bir ilev bildirimi* void e'!eptionPhro(er( ) thro((!har0, int)/ biiminde aplr# Ter belirtildi se, ilev +rlatma listesi ilev balnn hemen !tesinde g!rnr -ve ar&a )las &)nst belirte&inin !tesinde/, ve, thr)_ listelerinin b) )ld%% belirtilebilir, kalb aadaki verilmitir* thro((Ct"pe1 C, t"pe1, t"pe5, . . .DD) Ter bir ilev istisnalar +rlatma"sa, ) "aman b) ilev +rlatma listesi k%llanlabilir# <rnekC void noS'!eptions( ) thro(( )/ $tn d%r%mlarda ilev tanmnda k%llanlan ilev bal bildirimde

b%l%n%lan ilev bal ile tam % %ml% )lmaldr# <rnek* b%na )las b) ilev +rlatma listesi de dahildir# $ir ilev +rlatma listesinin ait )ld%% ilev dier tipte istisnalar +rlatma a&ak ekilde belirtilmelidir# Ter ilev +rlatma lsitesinde b%l%nan istisnalardan baka istisnalar +rlatlma a allrsa, alma srasnda hatalar -r%n time err)rs.alma "aman hatalar/ )rta a kar# 'adaki !rnekte tanm ve bildirimlere dikkat eelim* BBC$@>Cbak#&pp BBtanmlar ve bildirimler .in! %de -iostream* %sing namespa!e std/ void !har>intPhro(er( ) thro((!har !onst0, int) / JJ&i dirim er ! ass Phro(er< p%& i!H void intPhro(er(int) !onst thro((int) / I/ void Phro(erHHintPhro(er(int ') !onst thro((int)<JJtan3m ar i#(') thro((')/ I void !har>intPhro(er( ) thro((!har !onst0, int)< int '/ !err--?&ir int girH =/ !in**'/ Phro(er( ).intPhro(er(')/ thro( =7 giri irse &% metin orta"a ge ir?/ I void r%nPimeSrror( ) thro((int)< thro( 11.9/ I int main( )< tr"< !har>intPhro(er( )/ I !at!h (!har !onst0 message)< !err--?metin istisnasiH =--message--end / I !at!h (int va %e)<

!err--?int istisnasiH =--va %e--end / I tr"< !err--?%p4to r%n time hatasiEn?/ r%nPimeSrror( )/ I !at!h (....)< !err--?erisi emediEn?/ I IJJJHK BBretilen ktC alma srasnda )rta a kar# 8lev +rlatma listesi k%llanlmasa d, ilev a herhangi bir istisna +rlatrd a da hi istisna +rlatma"d# 8lev +rlatma listesi k%llanlma"sa, d)r% istisna !neti&isi salama s)r%ml%l%%, tamamen pr)gram tasarm&sna aittir#

]stisna ar ve iostream er
C++ dilinin girdiBkt ktphanesi -i)stream/ C++ da istisnalar gndemde )kken de vard, ani k%llanl )rlard# $% "den n)rmalde, i)stream ktphane sn+lar istisnalar +rlatma"lar# $%n%nla beraber b% sn+larn davranlarn, i)sCCeZ&eti)ns- / e ilevini k%llanarak deitirmek mmkndr# $% ilevin iki tane, bindirime %ram biimi b%l%n%r* WW iostateHHe'!eptions( ) C $% e istisnalar +rlatan akn d%r%m ba raklarn d!ndrr# WW void e'!eptions(iostate state) C $% e state d%r%m% g!"lendii "aman bir istisna +rlatr# 8stisnalar, 7B ktphanesi ile balantl )lan, iosHHe'!eption dan tretilen iosHH#ai %re sn+nn nesneleridir# #ai %re nesnesi string !onst6 message ile ina edilir# $%, virt%a !har !onst0 (hat( ) !onst esinden elde edilir# 8stisnalar, sade&e istisnai d%r%mlarda k%llanlmas la"mdr# $%ndan d)la TOY -end )+ +ile.d)s a s)n%/ gibi standart s)nlandrmalarda, ak nesnelerinin istisna +rlatmas s)rg%lanmamaldr# 7irdi hatalarn !netmek iin ise, istisnalarn +rlatlmas tabii sav%n%labilir, !rnek )larak

girdi hatalar )lmamas la"m geldii ve !km bir d)s a ima ettii "aman# $%rada % g%n bir hata iletisi ile d%r%m% bildirip, pr)gramdan kmak genellikle en d)r% davrantr# (imdi istisnalarn k%llanmn etkileimli, sa lar bekle en pr)gramla g!sterelim* BBC$@>CeZpn%m#&pp BBsa lar bekleni )r .in! %de -iostream* %sing namespa!eHHstd/ int main( )< !inHHe'!eptions(iosHH#ai &it)/ (hi e(tr%e)< tr"< !o%t--?&ir sa"i girH =/ int va %e/ !in**va %e/ !o%t--?girdigin sa"iH =--va %e--end / I !at!h (iosHH#ai %re !onst6 pro& em)< !o%t--pro& em.(hat( )--end / !in.! ear( )/ string s/ get ine(!in, s)/ I I IJJJHK

Nap3!3 ve N3k3!3 i2 ev erde ]stisna ar


Sade&e Xina edilmi[ )lan nesneler eri geldii "aman k& ilevler&e silinirler# $% &mle d)r%d%r ama, ine de bir in&elik tamaktadr# $% in&elie gelelim imdi* a nesnenin inas eitli sebeplerden tamamlanamsa, ) "aman nesne g!rnt dna ktnda, k& ilev arlama"# 9ap& ilev tara+ndan akalanama an istisna retildiinde, b% v%k% b%lm% demektir# Aesne bellee erleirken - ani tam d)r% erleim )k/ s)nra istisna +rlatlrsa, ) "aman kaplanan bellek alann silmek iin k& ilev g!rev apama"# S)n% )larak, bellek kaa

)rta a kar# 'adaki !rnek b%n%n basit biimini g!stermektedir* On&)mplete sn+ !n&e bir ileti g!stermekte daha s)nra istisna +rlatmaktadr# 9k& ilevi de bir ileti g!stermektedir# ! ass ;n!omp ete< p%& i!H ;n!omp ete( )< !err--?&e ek a ani &iraz kap andiEn?/ thro( 7/ I K;n!omp ete( )< !err--?kap anan &e ek a ani si ini"orEn?/ I I/ =aha s)nra main- / ilevinde tr bl)% iinde On&)mplete nesnesi )l%t%r%l%r# ;retilen herhangi bir istisna erine g!re akalanr# int main( )< tr"< !err--?);n!omp ete) nesne o %s%m%En? / ;n!omp ete( )/ !err--?nesne o %st%r% d%En?/ I !at!h (... )< !err--?istisna "aka andiEn?/ I IJJJHK $% pr)gram altrld "aman aadaki s)n% retilirC ,On&)mplete, nesne )l%%m% bellek alani bira" kaplandi istisna akalandi $% "den eer On&)mplete ap& ilevi bir nesne )l%t%rm% )lsa d

pr)gram bellek kaana mar%" kala&akt# $%n% engellemek iin aadaki !nlemler alnabilir* WW 8stisnalar ap& ilevi terketmemeliler# 9ap& ilev k)d%nda bir erde istisnalar retilirse, ) "aman k)d%n b% eri tr bl)%n&a k%atlmal ve ap& ilevin iinde istisna akalanmaldr# 6abii, ap& ilevin dndan da istisnalar +rlatmann geerli nedenleri )labilir, nesnenin hen" )l%mad ap& ilev k%llanlarak k)d d)r%dan bilgilendirilebilir# Lakin istisna ap& ilevi terketmeden !n&e, k%llanlm )lan bellek alann silmek iin bir ans verilmesi la"mdr# $%n%n nasl apla&a aadaki ap& ilev !rneinden g!rlebilir# $%rada dikkat edile&ek n)kta* retilen herhangi bir istisnann d k)dlar k%llanlp nasl eniden +rlatla&adr# ;n!omp eteHH;n!omp ete( )< tr"< d$memor",ne( P"pe/ !ode$ma"&e$thro(ing$e'!eptions( )/ I !at!h (... )< de ete d$memor"/ thro(/ I I/ WW 8stisnalar elere ilk deer atamalar aplrken )rta a kabilir# $! le d%r%mlarda ap& ilev g!vdesinde er alan tr bl)%n%n, istisnalar akalama ans )kt%r# $ir sn+ g!sterge veri eleri k%lland "aman, ve b% veri elerinin ilk deer atamalar aplrken istisnalar )rta a karsa, bellek kaaklarndan ine de k%rt%l%nabilir# $% &ing!" g!stergeler -smart p)inters/ k%llanlarak baarlabilir# <rnek )larak a%t)Sptr nesnelerinin k%llanmn g!sterebiliri"# a%t)Sptr nesneleri nesne )ld%klar iin, b%nlarn nesne )l%%mlar tamamlanmasa bile ine de k& ilevleri arlr# $% d%r%mda temel k%ralm" )lan Xnesne tam )l%t%r%ld%%nda, g!rnt dna kt "aman, k& ilevi arlr#[ hala geerlidir# a%t)Sptr nesnelerinin k%llanm istisnalar ap& ilev dna +rlatld "aman, hatta istisna e baalt& -ilk deer ata &s/ tara+nda retilse bile, bellek kaaklarn engeller#

$%nlarn annda C++, ilevlerden -ve a ap& ilevlerden/ kan istisnalar engellemek iin, daha d"enli aplar da b%l%nd%rmaktadr* ilev deneme bl)klar -+%n&ti)n tr bl)&k/# $%nlar bir s)nra ki b!lmde in&ele e&ei"# 9k& ilevler istisna +rlattklarnda, "aten kendileri s)r%nl% demektir# 8stisna +rlatldnda kaplanan bellek alannn tamamnn silinmemesi "nden, k& ilevlerden kan istisnalar da bellek kaaklarna )laar# 6amamlanmam % g%lamalarn baka eitlerine de rastlanabilir# <rnek )larak* bir veritaban sn+, veritabannda me dana gelen deiikleri bellekte saklamaktadr, veritabann b%l%nd%ran d)s ann gn&ellenmesi g!revi ap& ileve braklmtr# =)s a gn&ellenmesinden !n&e k& ilev istisna retirse, artk gn&elleme ani enileme )lma"# Yakat b% kadar deil, baka bir, )k daha in&e, k&lardan ka naklanan bir istisna daha b%l%nmaktadr# $%n% bir ben"etme le anlatma la alalm* bir marang)" var tek ekme&eli bir d)lap ina edi )r# =)lap biti )r, mteri geli )r d)lab alp para !d )r, ve daha s)nra d)labn istedii gibi altn g!rp m%tl% )l% )r# =)lab la m%tl% mteri daha s)nra marang)"a ine geli )r b% se+er iki ekme&eli bir d)lap siparii veri )r# 8kin&i d)lap bittiinde mteri gelip al )r ve evine g!tr )r# 'ma mteri iki ekme&eli d)labn ilk k%llandnda, d)lap para pinik )l% )r# Uteri a&a ip akn, ilk d)lap +stk gibi idi, ikin&isi re"alet# Aasl %"%n hika e deil miQ# (imdi aadaki pr)grama bakalm* BBC$@>CbakSbakalim#&pp BBi i in&ele in int main( )< tr"< !err--?Uo ap1 i "apEn?/ Uo ap1( )/ !err--?Uo ap1 nesne i erisiEn?/ I !at!h (... )< !err--?Uo ap1 &ek endigi gi&iEn?/ I tr"< !err--?Uo ap1 "i "apEn?/ Uoa p1( )/ !err--?Uo ap1 nesne i erisiEn?/ I

!at!h (.... )< !err--?Uo ap1 &ek endigi gi&iEn?/ I I $% pr)gram altrld "aman aadaki s)n%alr retilirC =)lapD i ap Cekme&e D k%llanildi =)lapD beklendigi gibi =)lapE i ap Cekme&e E k%llanildi Cekme&e D k%llanildi 6erket 9%karda g!rld "ere X=)lapE beklendigi gibi[ erine, terket emri gelmi pr)gramdan klmtr# (imdi F tane sn+ ina edelim ve b%nlar bildiimi" sn+lar )ls%n, ama sade&e Cekme&e sn+nda k& ilev istisna +rlatsn# ! ass Cekme!e< %nsigned d$nr/ p%& i!H Cekme!e(%nsigned nr) H d$nr<I KCekme!e( )< !err--?Cekme!e?--d$nr--? k% ani diEn?/ thro( 7/ I I/ ! ass Uo ap1< Cekme!e e#t/ p%& i!H Uo ap1( ) H e#t(1)<I I/

! ass Uo ap1< Cekme!e e#t/ Cekme!e right/ p%& i!H Uo ap1( ) H e#t(1), right(1)<I I/ =)lapD in k& ilevi arld "aman, Cekme&e nin k& ilevi har biiminde )l%t%r%lm% )lan nesne i silmek iin, s)n%nda arlr# $% k& ilevin +rlatt istisna, pr)gramn ilk tr bl)%n%n ilerisinde akalanr# 8ler tamamen beklendii gibi gerkleir# $%n%nla birlikte =)lapE nin k& ilev arm ile, s)r%n )rta a kar# 8ki har nesnesinden, ikin&i Cekme&e nin k& ilevi !n&e arlr# $% k& ilev, pr)gramn ikin&i tr bl)%n%n ilerisinde akalanabilen, bir istisna +rlatr# $%n%nla birlikte denetim ak ) "amn =)lapE nin k& ilevi ile balantl )larak braklmasna ramen, ) nesne tamamen silineme", hen" dier Cekme&e -le+t/ nin k& ilevi arlmak ")r%ndadr# A)rmalde b% b k bir s)r%n deildir* Cekme&eE nin k& ilevinden kan istisna bir ke" +rlatlr, geri kalan e lemler g!"ard edilir, le+t in k& ilevi arlsa bile b% b! ledir# $%n%nla birlikte le+t in k& ilevi de bir istisna +rlatr# 8kin&i tr bl)%n%n balantsn braktm" iin, pr)gramlanm ak denetimi tamamen karr, ve pr)gramn baka bir seenei kalmadndan terk ilemi )l%r# $% da sra ile, terminate- / ve a ab)rt- / ilevi arlarak erine getirilir# 8te imdi tek ekme&eli d)lap mkemmel alsa bile, iki Cekme&eli para pinik )lan d)labm" var# Kr)gram terkedilir, "ira k&lar terkeden, k& ilevlerin +rlatt istisnalar )lan )k sa da har nesnesi b%l%n%r# $% d%r%mda har nesnelerinden bir tanesi, pr)gram ak denetimi % g%n iliki e brakld anda bir istisna +rlatr# $% da pr)gramdan klmasn, ani pr)gramn terkini salar# Ter istisnalarn k&lar hibir "aman terketmemesi gven&e e alnrsa, b% d%r%m k)la lkla engellenebilir# =)lap !rneinde, Cekme&e nin k&s k& ilevden kan bir istisna +rlatr# $%n%n )lmamas la"mC istisna Cekme&e k&snn kendisi tara+ndan akalanm )lmas la"mdr# 9k& ilevlerin dna hibir "aman istisna +rlatlmadnda, bi"im de d katmanda istisnalar akala abilmemi" mmkn )lma"# 'slnda b% &iddi bir s)n% deildir "ira, k& ilevler denetim ak ile deil, d)r%dan siline&ek nesnelerle balants )lan g!rev eleridir# (imdi !rnek )larak

istisnalar +rlatan bir k& ilev iskeleti verelim# C assHHKC ass( )< tr"< ma"&e$thro($e'!eptions( )/ I !at!h (... )< I I

tr" i2 ev & ok ar3


9ap& ilev, elerinin ilk deerlerini atarken istisnalar )rta a kabilir# $! le d%r%mlarda ap& ilevin dnda deil de, bi""at ap& ilevin kendisi tara+ndan akalanabilen istisnalar nasl retilebilirQ# Aesne )l%%m%n%, %valama )l% ile %val tr bl)%na erletirmek "eki&e bir !"m )lmad gibi, eki&i de )lma"# Sebebi ise eni %valama -bira" da apa / sevi esi eklenmesidir# 'adaki !rnekte, =ata$ase sn+nn nesnesini tanmla an, main- / ilevinin b%l%nd%% %val tr bl)% k%llanlmtr# =ata$ase ap& ilevinin bir istisna +rlatt kab%l edili )r, d bl)kta b% istisna akala abilmek - ani main- / de aran k)d/ imkans", ve b% d%r%mda d katman )k demektir# $% nedenle bi" de daha a" estetik !"m semekli i", aa a bakn"* BBC$@>Cn)tSelegant#&pp BBpek estetik )lma an !"m int main(int arg!, !har00 argv)< tr"< UataBase d&(arg!, argv)/ BBistisnalar +rlatr .... BBmain- / ilevinin !teki k)dlar I !at!h (... )< BBveBve a !br !neti&iler ###### I IJJBCJ

$% aklamn )ld%ka kark k)d retme p)tansi eli vardr# )k sa da nesne tanmlana&ak )l%rsa ve a, tr bl)%nda )k sa da istisna ka naklar tanmlanrsa, a )k sa da karmak istisna !neti&ilerimi" )l%r, ve a )k sa da %val tr bl)% k%llanmak ")r%nda kalr", ve tabii herbiri kendi akalama -&at&h/ !neti&isine sahiptir# 6abii b% aklamlarn hibiri temel s)r%n% !"me"* !rel balant )rtadan ka b)lmadan !n&e, !rel balantda retilen istisnalar nasl akalanabilirQ# $ir ilevin !rel balants, ilevin g!vdesi tr ilev bl)% )larak tanmland "aman eriilebilir kalr# $ir tr ilev bl)%, ilev g!vdesini tanmla an tr bl)% ile )n%n !neti&ilerinden )l%m%t%r# 6r ilev bl)% k%llanld "aman, istisnalar ap& ilev balat& listelerinden ka naklansa bile, ilevin kendisi kendi k)d%n%n rettii istisnalar akala abilir# 'adaki !rnek, !n&eki main- / ilevinde bir tr ilev bl)%n%n erleimini g!stermektedir# int main(int arg!, !har00 argv)< tr"< UataBase d&(arg!, argv)/ BBistisnalar +rlatr ##### BB!br k)dlar I !at!h(... )< BBve die !neti&iler ####### I 6abii b% hala bi"e =ata$ase ap& ilevin&e +rlatlan istisnalarn, =ata$ase ap& ilevin&e akalanmas imkann verme"# $%n%nla birlikte tr ilev bl)klar ap& ilevleri )l%t%r%rken k%llanlabilir# $% d%r%mda ana sn+ ve a e balat&lar tara+ndan +rlatlan istisnalar, ap& ilevin istisna !neti&ileri tara+ndan akalanabilir# 'adaki !rnek ap& ilevin b% d)r%lt%daki k%llanmn g!stermektedir# 6r anahtar kelimesinin b%l%nd%% ere dikkat edinMM - e balatma listesindeki !n&eliineMM/ BBC$@>Ctr S eri#&pp BB ap& ilevde tr eri

.in! %de -iostream* ! ass Phro(< p%& i!H Phro((int va %es) tr"< thro( va %e/ I !at!h(... )< stdHH!o%t--?Phro(( ) tara#3ndan "Lneti en )Phro() %n istisnas3En?/ thro(/ I I/ ! ass Composer< Phro( d$t/ p%& i!H Composer( ) tr" BB=ikkatMM ilk deer atamalarndan !n&e gelen tr M H d$t(9)<I !at!h(.... )< stdHH!o%t--?Composer( ) istisna"3 "erinde "aka arEn?/ I I/ int main( )< Composer !/ IJJJHK BBretilen ktC 6hr)_- / tara+ndan !netilen ,6hr)_, %n istisnas C)mp)ser- / istisna erinde akalar BB 9%kardaki !rnekte, 6hr)_ nesnesi tara+ndan +rlatlan istisna !n&e nesnenin kendisi tara+ndan akalanr# =aha s)nra tekrar eniden +rlatlr# C)mp)ser ap& ilevi bir tr ilev bl)% k%llanrken, istisna ilk deer atama listesinin iinde retilmi )lsa bile, 6hr)_ %n eniden +rlatlan istisnas C)mp)ser %n istisna !neti&isi tara+ndan a r&a akalanr# S)n bir n)t* tr ilev bl)% k%llanan bir ilev ve a ap& ilev a r&a +rlatla&ak istisna tiplerini bildirir, daha s)nra tr ilev bl)% ilevin istisnalarn belirten liste i takip etmek ")r%ndadr#

F. BL m

SBB nesne i2 ev er
'lg)ritmalarda k%llanlan ilevik deikenler ilev )lmak ")r%nda deildirler# 8levler gibi davranan nesneler )labilirler# $! le bir nesne e nesne ilev, ilev&i ve a +%n&t)r -tela++%"%C +anktr/ denir# $% tr nesneler ba"en n)rmal ilevler isteneni apamad "aman k%llanlabilir# SKK -standart kalp ktphanesi/ sk sk nesne ilevleri k%llanr, ve )k ararl bir sr nesne ilevi salar#

Vesne i2 ev eri

Aesne ilevleri kalpl pr)gramlamann g&nn, ve sa+ s) %tlamann bir !rneidir# 8lev gibi davranan bir !e e ilev di ebilirsini"# 8lev gibi davranan bir nesne tanmlarsan", ) "aman )n% ilev gibi k%llanabilirsini"# Keki si"&e ilev davran nedirQ# 9antC ilevik davran ! le bir e dir ki, si" )n% a ralar k%llanarak ve deikenler ata arak arabilirsini"# <rnekC #onksi"on(arg1, arg1)/ BBbir ilev ars

8te b% "den nesnelerin de b! le davranmas istenirse, )nlar da a ralar k%llanarak ve deikenler ata arak arlmalar la"mdr# Tvet b% mmkn# -aslnda C++ da hemen her e mmkndr/# 9apla&ak btn e * % g%n deiken tiplerine sahip )perat)r- / tanmlamaktr# ! ass S< p%& i!H JJ,ilev ar, ile&ini tanmla n d!n deeri operator( ) (deikenler) !onst/ ..... I/ (imdi artk, ardn" ilevler gibi davranan b% sn+n nesnelerini k%llanabilirsini"# S #o/ . .. #o(arg1, arg1)/

BBnesne ilevi +) iin )perat)r- / arn

$% arnn edeeriC #o.operator( ) (arg1, arg1)/ BB %kardakine edeer ar 'ada tam bir !rnek verilmitir# BBC$@dCherbiri#&pp BBnesne ilev k%llanm .in! %de -iostream* .in! %de -a gorithm* .in! %de -ve!tor*

%sing namespa!e std/ ! ass >rint;n< p%& i!H void operator( ) (int e eme) !onst< !o%t--e eme--) )/ I I/ JBaktarlan deikenleri a"dran nesne ilevi int main( )< ve!tor-int* !o / #or(int i,7/ i-,e/ ++i)< BBD den R a !eleri erletir !o .p%sh$&a!k(i)/ I BBbtn !eleri a" #or$ea!h(!o .&egin( ), !o .end( ), >rint;n( ))/ !o%t--end / IJJJHJ (imdi merak ede&eksini", b%n%n bi"e ne +a das )ld%# 3atta b% nesne ilevlerini, a&a ip, k)dlar kartran a"m biimi )ld%%n% dnebilirsini"# Tvet k)dlarn bira" kark g!rnd d)r%d%r# 'ma nesne ilevleri, ilevlerin bi""at kendilerinden daha +a"la eteneklidirler# 8te stnlkleriC WW Aesne ilevler X&ing!" ilevlerdir[ $ilindii gibi g!sterge gibi davranan nesneler X&ing!" g!sterge[ lerdir# ' n e , ilev gibi davranan nesneler iin de geerlidir# $%nlar )perat)r- / den daha +a"la etenee sahip )ld%klar iin, X&ing!" ilev[ )labilirler# Aesne ilevler, baka eler ve !"elliklere de sahip )labilirler# $%n%n anlam* nesne ilevinin bir d%r%m% vardr# 'slnda nesne ilevin&e temsil edilen a n ilev, a n anda birden +a"la d%r%ma sahip )labilir# $% n)rmal ilevler iin geerli deildir# Aesne ilevlerinin baka bir stnl, pr)gram ilerken k%llanlmadan hemen !n&e ilk deer atamasn apabilirsini", ani nesne ilevine dinamik atama gerekletirebilirsini"# WW 3er nesne ilevinin kendi tipi vardr# A)rmal ilevler sade&e im"alar +arkl )ld%% "aman +arkl tiplere sahiptirler# Aesne ilevleri ise, im"alar a n )lsa dahi +arkl tiplere sahip )labilirler# 'slnda nesne ilevin tanmlad her ilevik davran iin kendi tipi b%l%n%r# $%, kalplarn k%llanld kalpl pr)gramlamada

!nemli bir aratr, b! le&e ilevik davran kalp deikeni )larak aktarabilirsini"# Sralama kstas )larak a n nesne ilevini +arkl tiplerin kaplarnda k%llanabilirsini"## Yarkl sralama kstas )lan t)pl%l%klarn atamalarn, biletirilmelerini, ve karlatrlmalarn apmaman" gven&e e alr# 3atta si", +arkl !"el bir eit genel kstasa sahip, ilev nesneler hi erarileri tasarla abilirsini"# WW Aesne ilevler n)rmal ilevlerden genellikle daha h"ldrlar# Kalplar, derleme esnasnda daha +a"la a rnt tanmland iin daha )k i iletirme e i"in verirler# $% "den n)rmal ilevler erine nesne ilevleri aktarmak, daha stn baarlar salar# $% b!lmn geri kalan ksmnda, nesne ilevlerin n)rmal ilevlere g!re nasl daha &ing!" -ve a akll/ )labildiklerini anlata&a"# =aha s)nra da a rntlara gire&ei"# $ir kmede b%l%nan btn !elere belli bir deerin eklendiini varsa alm# =erleme esnasnda si" b% eklene&ek deeri bili )rsan", n)rmal bir ilevi b% i iin k%llanabilirsini"# void add177(int6 e em)< e em+,177/ I void #1( )< ve!tor-int* !o / ..... #or$ea!h(!o .&egin( ), !o .end( ), add177)/ I Ter derleme esnasnda bilinen +arkl deerleri eklemek isti )rsan", ) "aman kalp k%llanmalsn"# temp ate-int theAa %e* void add(int6 e em)< e em+,theAa %e/ I void #1( )< ve!tor-int* !o / .... #or$ea!h(!o .&egin( ), !o .end( ), add177)/ I

=erleme esnasnda +arkl deerlere gerek d% %l%rsa, kalp k%llanabilirsini"# temp ate -int theAa %e* void add(int6 e em)< e em+,theAa %e/ I void #1( )< ve!tor-int* !o / ... #or$ea!h(!o .&egin( ), !o .end( ), add-177*)/ I 9)k, derleme esnasnda deil, pr)gram alrken deerleri eklemek isterseni", )la lar karmaklar# :ira ilev arlmadan !n&e ileve deer aktarm ")r%nl%d%r# $%n%n s)n%&%nda hem alg)ritma aran ilev, hem de t)plama apan alg)ritma aran ilevde k%llanlan gl)bal deikene gerek d% %l%r# 6abii b% mkl bir d%r%md%r# Kark bir !"m ani# $! le bir ileve iki kere gerek d% arsan", ve iki +arkl deer eklemek isterseni", ve her iki deerde pr)gram alrken eklenirse, b%n% bir tane n)rmal ilevle apama"sn"# 9a bir iaret eklersini", ve a iki +arkl ilev tanmlarsn", ani b%na me&b%rs%n%"# 3i, d%r%m%n% k)r%mak iin stati& deikeni )lan, ve a n anda baka bir d%r%m% iin de a n ileve ihti a d% d%%n%"da, bir ilev tanmn k)p aladn"mQ# 8te d%r%m b%rada a nen b! ledir# 8lev nesneleri ile istendii gibi davranan daha X&ing!"[ ilevler a"abilirsini"# :ira nesnenin bir d%r%m% vardr, ve si" )n% d)r% deerle balatabilirsini"# 8te si"e b%na % g%n tam bir !rnek* BBC$@dCaddD#&pp BBilev nesnesi !rnei .in! %de -iostream* .in! %de - ist* .in! %de -a gorithm* .in! %de =print.hpp? ! ass MddAa %e< privateH int Aa %e/ JJeklene&ek deer

p%& i!H MddAa %e(int v) H Aa %e(v)< I BB ap& ilev eklene&ek deerle balatlr void operator( ) (int6 e em) !onst< BBdeeri ekle en ilevin ars e eme+,Aa %e/ I I/ int main( )< ist-int* !o / #or$ea!h(!o .&egin( ), !o .end( ), MddAa %e(17))/ BB+)rSea&h- / in ilk arlnda her deere D@ eklenir# $%rada BB'ddNal%e-D@/ aklamas, 'ddNal%e tipinde, ilk deeri D@ )lan bir BBnesne )l%t%r%r# 'ddNal%e ap& ilevi b% deeri Nal%e esi )larak BBsaklar# +)rSea&h- / iinde ise &)ll n her !esi iin X- /[ arlr# ' r&a BBb%, aktarlan gei&i 'ddNal%e tipindeki nesne ilevinin )perat)r- / BBarsdr# 'sl !e deiken )larak aktarlr# Aesne ilevi D@ deerini BBher !e e ekler# <eler aadaki deerlere sahip )l%rlarC D@ ekledikten s)nraC DD DE DF DG DH D> Dd D` DR

BB+)rSea&h- / in ikin&i arlnda ilk !enin deeri btn !elere tek tek BBeklenir# $%rada ilk !e deeri ile gei&i nesne ilev balatlr# 9aniC MddAa %e(0!o .&egin( )) BBimdi ktC EE EF EG EH E> Ed E` ER F@

$% teknik k%llanlarak iki +arkl nesne ilevi ile, a n anda iki d%r%ma sahip ilevli s)r%nlar !"lebilir# <rnein* iki tane nesne ilev bildirip, b%nlar birbirinden bams" k%llanabilirsini"# MddAa %e add'( )/ BBnesne ilev Z deeri ekler# MddAa %e add"( )/ BBnesne ilev deeri ekler# #or$ea!h(!o .&egin( ), !o .end( ), add')/ BBher !e e Z deerini ekler #or$ea!h(!o .&egin( ), !o .end( ), add")/ BBher !e e deerini ekler $en"er ekilde eni e ilevlerle nesne ilevlerin d%r%m%n% s)rg%la abilir ve a deitirebilirsini"#

ntan3m 3 nesne i2 ev er
C++ standart ktphanesinde temel ilemler iin, )k sa da !ntanml nesne ilevi b%l%nmaktadr# $%nlar k%llandn"da bir)k d%r%m iin kendi nesne ilevlerini"i a"mak ")r%nda kalma"sn"# 6ipik !rnek )larak, sralama kstas )larak k%llanlan nesne ilevini verebiliri"# Operat)r4 n varsa lan sralama kstas, less4 5 !ntanml sralama kstasdr# Ter* set-int* !o / BBbildirirseni" BB!eleri 4 ile srala

set-int, ess-int* * !o / ters sralama iin ise* set-int, greater-int* * !o /

BB!eleri 5 ile srala

$en"er ekilde )k sa da nesne ilevi, sa larla ilem apabilirler# <rnein aadaki de im bir t)pl%l%ktaki !elerin tamamnn tersini alr* trans#orm(!o .&egin( ), !o .end( ), !o .&egin( ), negate-int* ( ))/ BBka nak BBvar BBilem

negate4int5 - / aklamas !ntanml kalp sn+ negate in nesne ilevini )l%t%r%r# arlan int tipi !elerin tersini geri d!ndrr# trans+)rm alg)ritmas ilk t)pl%l%ktaki btn !eleri ikin&i t)pl%l%ktaki !elere d!ntrr# Ka nak ve var !rneimi"de )ld%% gibi a n ise, ) "aman d!nen terslenmi !eler !n&ekilerin "erine a"lr# $! le&e btn !elerin tersleri alnm )l%r# $en"er ekilde bir t)pl%l%ktaki btn !elerin karelerini ilemle ebilirsini"* trans#orm(!o .&egin( ), !o .end( ), !o .&egin( ), !o .&egin( ), m% tip ies-int* ( ))/ BBilk ka nak BBikin&i ka nak BBvar BBilem

ntan3m 3 nesne i2 ev er
Aesne ilevler kalpl alg)ritmalarla birlikte, pr)gramlarda !nemli r)ller alrlar# <rnek vere&ek )l%rsak, sralamas apla&ak )lan nesnelerin alan snrlarn k) an inele i&ileri ile birlikte, SKK da s)rt alg)ritmas b%l%nmaktadr# $%rada bir nesne ilev, iki nesne arasndaki karlatrma apmak iin % g%n ile&i arr# (imdi b% d%r%ma akndan bakalm# Stringlerin bir ve&t)r de saklandn kab%l edelim, ve ve&t)r n !elerini a"alan sra ile di"elim# $% d%r%mda ve!tor stringAe! n sralamas aadaki gibi basit )l%r* sort(stringAe!.&egin( ), stringAe!.end( ), greater-stdHHstring*( ))/ s)n deiken bir ap& ilev )larak dnlmelidirC b% stringlere % g%lanan, greater- *( ) kalp sn+nn anlk d%r%m%n% verir# $% nesne s)rt alg)ritmas tara+ndan nesne ilevi )larak adlandrlr# )perat)r- /- / ile&i arlm )lsa bile, veri tipinin -b%rada stdCCstring/ )perat)r5- / ile&ini arr# S)n% )larak s)rt alg)ritmasnn geri d!nnde, ve&t)r n ilk !esi en b k !edir# $%rada )perat)r- /- / n kendisi g!rnme"C greater4string5- / ile aran )perat)r- /- / n a ralarn birbirine kartrma n# $% ile aslnda s)rt iinde k%llanld "aman iki deiken alr* ani daha b kl saptamak iin iki string# 8eride ise, inele i&ilerin iaret ettii veri tipinin )perat)r5- / ile&i, iki nesne i karlatrmak iin greater4string5 in ile ilevin&e -)perat)r- /- / / arlr# greater4 5 n ilev ar ile&i satrii )larak tanmlandndan, arnn kendisi aslnda k)dda g!rlme"# =aha "i ade, greater4 5CC)perat)r- /- / ard dnlerek s)rt- /, stringCC)perat)r5- / arr# 'rtk alg)ritma a -)%na/, bir ap& ilevin deiken )larak aktarldn bili )r%"# (imdi kendi nesne ilevlerimi"i tasarla abiliri"# $%rada karakter b kl ve kklne bakmadan ve&t)r m" sraladm" dnelim# <n&e b%rada hemen belirtmemi" gereken, stringCC)perat)r4- / varsa m % g%n deildir# :ira b% varsa m, karakter b kl ile kkln dikkate alr# O "aman bi"im &aseSless sn+n ina etmemi" la"m# $% sn+ iki string i karakter b) %tlarna bakmaks"n karlatrr# 'adaki pr)gram standart C ilevi )lan str&ase&mp- / i k%llanarak b% n%

gerekler# Kr)gram k)m%t satr deikenlerini artan srada al+abetik )larark d"enler# BBC$@dCsral#&pp BBartan srada al+abetik d"enle .in! %de -iostream* .in! %de -#%n!tiona * .in! %de -string* .in! %de -a gorithm* %sing namespa!e std/ ! ass !ase$ ess< p%& i!H &oo operator( )(string !onst6 e#t, string !onst6 right) !onst< ret%rn str!ase!mp( e#t.!$str( ), right.!$str( ))-7/ I I/ int main(int arg!, !har00 argv)< sort(argv, argv+arg!, !ase$ ess( ))/ #or(int id',7/ id'-arg!/ ++id') !o%t--argvCid'D--? =/ !o%t--end / IJJJHK 9%karda &aseSless sn+nn varsa lan ap& ilevi, s)rt alg)ritmasnda s)n deiken )larak k%llanld# $% "den &aseSless sn+ ile tanmlanmas ")r%nl% tek e ilev* )perat)r- /- / nesne ilev ile&idir# string deikenlerle arldn bildiimi"den, str&ase&mp- / ilevinde k%llanlan )n% iki string deiken bekle en )larak tanmlar"# =aha da !tesi )perat)r- /- / ilevi satrii aplr# $! le&e s)rt ilevin&e arldnda, masra+a neden )lma"# s)rt ilevi, string lerin deiik k)mbinas )nlarn b%l%nd%ran nesne ilevini arr# 9ani ! le )ld%%n% dnr# $%n%nla birlikte, aslnda satrii )larak belirtilen &aseSlessCC)perat)r- /- / a bal )larak str&ase&mp- / i arr# Karlatrmada nesne ilevi )larak )% ke" !ntanml nesne ilevi k%llanlr, "ira b%nlar )k sa da deiik ilemde a gn )larak ie arar# 'adaki b!lmlerde )k sa da !ntanml nesne ilevi !rnek k%llanmlar ile birlikte anlatla&ak# Aesne ilevleri ile ilgili b!lmn s)n%nda ise, % arla & ilevler -+%n&ti)n adapt)rs/ hakknda bilgi verile&ek# <ntanml

nesne ilevi k%llanlmadan !n&e m%tlaka aadaki !nilemle i&i !nergesi pr)grama a"lm )lmaldrC .in! %de -#%n!tiona * <ntanml nesne ilevleri esasen kalp alg)ritmalar ile birlikte k%llanlrlar# <ntanml nesne ilevleri* aritmetik, iliki&i ve mantk ilemlerinde er alrlar# =aha s)nra da, bit biimli -bit_ise/ bir !rnek vere&ei"#

Mritmetik nesne i2 ev eri


'ritmetik nesne ilevler bildiimi" aritmetik ilemleri aparC t)plama, karma, arpma, b!lme, m)d alma ve tersleme# $% !ntanml nesne ilevler ilgili veri tipinin denk gelen ile&ini % arrlar# <rnek* t)plama iin pl%s46 pe5 nesne ilevi vardr# Ter tipi %nsigned )larak belirtirsek, ) "aman + ile&i iin %nsigned deerler k%llanlr# Ter tipi string )larak belirtirsek, ) "aman da + ile&i string ler iin ilem apa&ak ekilde k%llanlr# <rnek* BBC$@dCarSnesSis#&pp BBaritmetik nesne ilev k%llanm .in! %de -iostream* .in! %de -#%n!tiona * .in! %de -string* %sing namespa!e std/ int main(int arg!, !har00 argv)< p %s-%nsigned* %Mdd/ BB%nsigned lar eklemek iin nesne ilevi !o%t--?5+9, =--%Mdd(5, 9)--end / p %s-string* sMdd/ BBstring leri ekle en nesne ilevi !o%t--?argvC7D+argvC1D, =--sMdd(argvC7D, argvC1D)--end / IJJJHK BBretilen ktCa#)%tg)ing ars ile F+H.` argv0@1+argv0D1.a#)%tg)ing

BB Te b%n%n ne +a das var di e&eksini"# Aesne ilevi btn veri tipleri iin k%llanlabilir - ani sade&e !ntanml )ld%klar veri tipi iin deil/, b%rada herhangi bir veri tipine % g%n )larak ilgili ile bindirime %ratlr# <rnekC bir andan )rtak bir deikende bir ilem gerekletirmek iste elim, !te andan da, bir di"inin her !esine sra ile ilem apalm# 9ani bir di"inin !elerinin t)plamn hesapla alm, ve a metin biimli di"inin !elerini ardarda ekle elim# 8te b%na ben"er d%r%mlarda nesne ilevler ga et k%llanldrlar# =aha !n&e de belirttiimi" gibi, nesne ilevler kalp alg)ritmalarla balantl )larak )%n ekilde k%llanlrlar, imdi b% % g%lamalardan birine bakalm# 'lg)ritmlardan birisi de, a&&%m%late- / tir# $% alg)ritma inele i&ilerin iaret ettii alandaki !eleri "i aret eder, )rtak bir !ede ve alandaki her !ede istenen bir iki&i -binar / ilemi gerekler, ve btn !eleri "i aret ettikten s)nra t)plam s)n%&% geri d!ndrr# 'adaki !rnek pr)gramda, btn k)m%t satr deikenleri t)planr ve s)n string )larak a"drlr# BBC$@dC a"Sbakalim#&pp BBbtn k)m%t satrn tek string e erletir .in! %de -iostream* .in! %de -string* .in! %de -#%n!tiona * .in! %de -n%meri!* %sing namespa!e std/ int main(int arg!, !har00 argv)< string res% t, a!!%m% ate(argv, argv+arg!, string( ), p %s-string* ( ))/ !o%t--?&%t%n ek enen ardisik oge erH =--res% t--end / IJJJHK 8lk iki deiken inele i&ilerin "i aret ettii alann snrlarn belirtir# ;n& deiken ise string- / tir# 'n)nim string nesne ilk deer atamasn ani balatma salar# Ne b! le&e balatlr* string(=&%t%n ek enen ardisik oge erH ?)/

ve &)%t nesnesi de aadaki gibi basitleir* !o%t--res% t--end / =aha s)nra pl%s4string5 - / ile&i % g%lanr# 3emen belirtelim b%rada arlan ap& ilev pl%s4string5 deil, pl%s4string5 - / dir# Tn s)n%nda ardarda eklenmi string !elerden )l%an bir string elde edilir# (imdi de kendi 6ime sn+m" tanmla p, )perat)r+- / ile&ini bindirime %ratalm# 9ine pl%s !ntanml nesne ilevimi"i k%llanarak, tanmladm" veri tipimi"le "amanlar t)pla alm# BBC$@dC"amanSt)pla#&pp BB eni veri tipini pl%s ile k%llan .in! %de -iostream* .in! %de -string* .in! %de -#%n!tiona * .in! %de -n%meri!* .in! %de -sstream* .in! %de -ve!tor* %sing namespa!e std/ ! ass Pime< #riend ostream6 operator--(ostream6 str, Pime !onst6 time)< ret%rn !o%t--time.d$da"s--? da"s, ?--time.d$ho%rs-? ho%rs, =--time.d$min%tes--? min%tes and =-time.d$se!onds--? se!onds. =/ I %nsigned d$da"s/ %nsigned d$ho%rs/ %nsigned d$min%tes/ %nsigned d$se!onds/ p%& i!H Pime(%nsigned ho%rs, %nsigned min%tes, %nsigned se!onds) H d$da"s(7), d$ho%rs(ho%rs), d$min%tes(min%tes), d$se!onds (se!onds) <I Pime6 operator+,(Pime !onst6 rAa %e)< d$se!onds +,rAa %e.d$se!onds/

d$min%tes d$ho%rs d$da"s d$se!onds d$min%tes d$ho%rs ret%rn0 this/ I

+,rAa %e.d$min%tes +,rAa %e.d$ho%rs +,rAa %e.d$da"s Y,:7/ Y,:7/ Y,18/

+d$se!ondsJ:7/ +d$min%tesJ:7/ +d$ho%rsJ18/

I/ Pime !onst6 operator+(Pime !onst6 Aa %e, Pime !onst6 rAa %e)< ret%rn Pime( Aa %e) +,rAa %e/ I int main(int arg!, !har00 argv)< ve!tor-Pime* tve!tor/ tve!tor.p%sh$&a!k(Pime(1, 17, 17))/ tve!tor.p%sh$&a!k(Pime(17, 57, 87))/ tve!tor.p%sh$&a!k(Pime(17, 97, 7))/ tve!tor.p%sh$&a!k(Pime(57, 17, 57))/ !o%t--a!!%m% ate(tve!tor.&egin( ), tve!tor.end( ), Pime(7, 7, 7), p %s-Pime* ( ))--end / IJJJHK BBretilen ktC E da s, DE h)%rs, HD min%tes, F@ se&)nds BB $%radaki dikkati eken k)n%* 6ime sn+nn btn e ilevleri, satrii )larak tanmlanmlardr# $% da !rnei g!re&eli )larak kk t%tmak ve, )perat)r+- / ilevini satrii apmak iindir# <te andan gerek ha attaki 6ime n, b klnden !tr )perat)r+.- / ilevi satrii aplama"# =aha !n&eki pl%s nesne ilevini g!"!nne aldm"da, b% !rneimi" )ld%ka basittir# 6ime sn+ ap& ilevi tanmlar, erletirme ile&ini tanmlar, ve iki "aman nesnesini ekle ebilmek iin de kendi )perat)r+- / n tanmlar# main- / ilevinde G tane 6ime nesnesi ve&t)r46ime5 nesnesinde dep)lanr# =aha s)nra t)plam "aman hesaplamak iin, a&&%m%late- / alg)ritmas arlr# $% da, &)%t )stream nesnesine erletirilen, 6ime nesnesini d!ndrr# 8lk !rnekte ad )lan nesne ilevinin k%llanm g!sterilmiken, daha s)nraki iki !rnekte a&&%m%late- / ilevine aktarlan an)nim - ani ad )lma an/ nesnelerin k%llanm g!sterildi#

<ntanml nesne )larak aadaki aritmetik nesneler b%l%nmaktadrC WW pl%s4 5- /, daha !n&e de anlatld gibi, nesnenin )perat)r- /- / esi iki&i -binar / ile )larak )perat)r+- / arr, )n%n iki deikenini aktararak, )perat)r+- / n d!n deerini d!ndrr# WW min%s4 5- /, b% nesnenin )perat)r- /- / esi iki&i ile )larak )perat)r?- / arr, )n%n iki deikenini aktararak, )perat)r?- / n d!n deerini d!ndrr# WW m%ltiplies4 5- /, b% nesnenin )perat)r- /- / esi iki&i ile )larak )perat)rW- / arr, )n%n iki deikenini aktararak, )perat)rW- / n d!n deerini d!ndrr# WW divides4 5- /, b% nesnenin )perat)r- /- / esi )perat)rB- / arr, iki deikenini aktararak, )perat)rB- / n d!n deerini d!ndrr# WW m)d%l%s4 5- /, b% nesnenin )perat)r- /- / esi )perat)rj- / arr, iki deikenini aktararak, )perat)rj- / n d!n deerini d!ndrr# WW negate4 5- /, b% nesnein )perat)r- /- / esi tekli -%nar / ile )larak )perat)r?- / arr, deikenini aktararak tekli )perat)r?- / n d!n deerini d!ndrr# 6akip eden tekli ilem -%nar )perat)r?- / / !rneinde, di"ideki btn !elerin iaretleri deitirilmektedir# $%n%n iin trans+)rm- / alg)ritmas k%llanlr# trans+)rm- / alg)ritmas d!ntrle&ek nesnelerin alanlarn belirle en iki tane inele i&i bekler, bir inele i&i var erinin balang&n tanmlar -a n inele i&i ilk deiken )labilir/, dierinde ise bir nesne ilev belirtilen veri tipi iin tekli ilemi tanmlar# BBC$@dCtekli#&pp BBtekli ile k%llanm .in! %de -iostream* .in! %de -string* .in! %de -#%n!tiona * .in! %de -a gorithm* %sing namespa!e std/ int main(int arg!, !har00 argv)< int iMrrC D,<1, 41, 5, 48, 9, 4:I/

trans#orm(iMrr, iMrr+:, iMrr, negate-int*( ))/ #or(int id',7/ id'-:/ ++id')< !o%t--iMrrCid'D--?, =/ !o%t--end / IJJJHK BBretilen ktC ?D, E, ?F, G, ?H, > BB

] i2ki i nesne i2 ev er
8likili ileler ilikili nesne ilevler tara+ndan arlrlar# K%llanlan btn ilikili ileler* .., M., 5, 5., 4, ve 4. dir# K%llanlan nesneler ise aada verilmitir* WW eg%alSt)4 5- /, b% nesnenin )perat)r- /- / esi iki&i ile -binar )perat)r/ )larak )perat)r..- / arr, iki deikenini aktarr ve )perat)r..- / n d!n deerini d!ndrr# WW n)tSeg%alSt)4 5- /, b% nesnenin )perat)r- /- / esi iki&i ile )larak )perat)rM.- / arr, iki deikenini aktarr ve )perat)rM.- / n d!n deerini d!ndrr# WW greater4 5- /, b% nesnenin )perat)r- /- / esi iki&i ile )larak )perat)r5- / arr, iki deikenini aktarr ve )perat)r5- / n d!n deerini d!ndrr# WW greaterSeg%al4 5- /, b% nesnenin )perat)r- /- / esi iki&i ile )larak )perat)r5.- / arr, iki deikenini aktarr ve )perat)r5.- / n d!n deerini d!ndrr# WW less4 5- /, b% nesnenin )perat)r- /- / esi iki&i ile )larak )perat)r4- / arr, iki deikenini aktarr ve )perat)r4- / n d!n deerini d!ndrr# WW lessSeg%al4 5- /, b% nesnenin )perat)r- /- / esi iki&i ile )larak )perat)r4.- / arr, iki deikenini aktarr ve )perat)r4.- / n d!n

deerini d!ndrr# 8likili nesne ilevler de a n aritmetik nesne ilevler gibi, hem isimli hem de an)nim nesneler )larak k%llanlabilirler# s)rt- / alg)ritmasn k%llanarak bir ilikili nesne ilev verelim* BBC$@dCiliskili#&pp BBs)rt k%llanarak ilikili nesne ilev !rnei .in! %de -iostream* .in! %de -string* .in! %de -#%n!tiona * .in! %de -a gorithm* %sing namespa!e std/ int main(inr arg!, !har00 argv)< sort(argv, argv+arg!, greater$eT%a -string*( ))/ #or(int id',7/ id'-arg!/ ++id')< !o%t--argvCid'D--? =/ !o%t--end / sort(argv, argv+arg!, ess-string*( ))/ #or(int id',7/ id'-rg!/ ++id')< !o%t--argvCid'D--? =/ !o%t--end / IJJJHK $%rada s)rt alg)ritmas, inele i&iler alann ve inele i&ilerin iaret ettii karlatr& bekler# <rnekte string ler, al+abetik )larak d" ve ters sralanrlar# greaterSeg%al4string5- / aktarlarak a"alan d"ende string ler sralanr -ilk kelime Xen b ktr[/, less4string5- / aktarlarakta string ler artan d"ende sralanr -ilk kelime Xen kktr[/# =ikkat edilmesi gereken h%s%s* argv !elerinin tipi &harW dr, ve b% "den ilikili nesne ilev, string bekler# $%ndan d)la greaterSeg%al4string5- / ilikili nesnesi string lerin 5. ile&ini k%llanr, ama &harW deikenleri ile arlr# &har &)nstW tan string e gei, sessi"&e gerekleir#

Mant3k nesne i2 ev eri

Uantk nesne ilevi mantk ilelerini arr# K%llanlan mantk ilelerC VV, aa, ve M dir# 'adaki nesneler ktphane tara+ndan salanmtr* WW l)gi&alSand4 5- /, b% nesnenin )perat)r- /- / esi iki&i ile )larak )perat)rVV- / arr, iki deikenini aktarr ve )perat)rVV- / n d!n deerini d!ndrr# WW l)gi&alS)r4 5- /, b% nesnenin )perat)r- /- / esi iki&i ile )larak )perat)raa- / arr, iki deikenini aktarr ve )perat)raa- / n d!n deerini d!ndrr# WW l)gi&alSn)t4 5- /, b% nesnenin )perat)r- /- / esi tekli -%nar / ile )larak )perat)rM- / arr, tek deikenini aktarr ve )perat)rM- / n tekli d!n deerini d!ndrr# 'adaki basit pr)gram )perat)rM- / n k%llanm hakknda si"e bir +ikir verebilir# $%rada trans+)rm- / di"ideki sakl mantk deerleri d!ntrmek iin k%llanlan alg)ritmadr* BBC$@dCmantikSd)n#&pp BBM k%llanm .in! %de -iostream* .in! %de -string* .in! %de -#%n!tiona * .in! %de -a gorithm* %sing namespa!e std/ int main(int arg!, !har00 argv)< &oo &MrrCD,<tr%e, tr%e, tr%e, #a se, #a se, #a seI/ %nsigned !onst &MrrSize,sizeo#(&Mrr)Jsizeo#(&oo )/ #or(%nsigned id',7/ id'-&MrrSize/ ++id')< !o%t--&MrrCid'D-? =/ !o%t--end / trans#orm(&Mrr, &Mrr+&MrrSize, &Mrr, ogi!a $not-&oo *( ))/ #or(%nsigned id',,/ id'-&MrrSize/++id')< !o%t--&MrrCid'D--? =/ !o%t--end / IJJJHK BBretilen ktC DDD@@@

@@@DDD BB

W"ar a"3!3 i2 ev er
U arla & ilev var)lan alan nesne ilevi deitirir# 8ki eit % arla & ilev b%l%nmaktadrC D# $ala &larC b% % arla &lar iki&i -binar / nesne ilevlerini teki -%nar / nesne ilevlerine evirirler# $%n% da bir nesne i sabit bir nesne ilevine bala arak gerekletirirler# 8ki&i nesne ilev )lan min%s4int5- / ile !rnek vere&ek )l%rsak, ilk deiken D@@ ile balanabilir, b%n%n anlam her "aman s)n% -D@@?ikin&i deiken/ )la&ak demektir# $%rada a ilk deiken a da ikin&i deiken belli bir deere balanr# 8lk deikeni belli bir deere balamak iin bindDst- / nesne ilevi k%llanlr# 8kin&i deikeni belli bir deeri balamak iin ise bindEnd- / ilevi k%llanlr# $ir !rnek verelim* belli bir kstas geen pers)n nesnelerini sa mak iin pers)n nesnelerinin b%l%nd%% ve&t)r n b% !elerini sa alm# $%n%n iin &)%ntSi+- / alg)ritmasna, aadaki bala & ve ilikili nesne ilevini aktarr"# &ind1nd(greater->erson*( ), re#eren!e>erson) $! le bir bala & ne i aparQ# <n&e b% bir nesne ilevdir ve )perat)r- /- / e gerek d% ar# =aha s)nra b%, iki deiken bekler* ikin&i nesne ileve bir da anak, ve sabit deerli bir ilenen# $ala &lar kalp )larak tanmlanmalarna ramen, % g%lama a baktn"da d" ilev gibi kavramak daha % g%nd%r# (imdi bala &larla ilgili ha ali bir % g%lama !rnei verelim* ! ass &ind1nd< a%n!tion`&Qe!t !onst6 d$o&Qe!t/ `perand !onst6 d$rva %e/ p%& i!H &ind1nd(a%n!tion`&Qe!t !onst6 o&Qe!t, `perand !onst6 operand) H d$o&Qe!t(o&Qe!t), d$operand(operand)

<I [et%rnP"pe operator( )(`perand !onst6 va %e)< ret%rn d$o&Qe!t( va %e, rva %e)/ I I/ )perat)r- /- / esi arld "aman, bala & ar nesnenin )perat)r- /- / ne aktararak iki deiken salar* lval%e kendisinden, sabit deer ani ilenen ise ap& ilev ara&l ile alnr# =ikkat ederseni" b% tar" sn+larn basitliini hemen g!rrsn", "ira btn eler satrii )larak % g%lanr# &)%ntSi+- / alg)ritmas inele i&i alanndaki btn !eleri "i aret eder, s)n !e )larak tr%e d!ndren klemin -predi&ate/ ka tane )ld%%n% d!ndrr# 9inele i&i alanndaki her !e kleme aktarlr, ki b% tekli -%nar / ilevdir# $ala & k%llanarak greater- / iki&i nesne ilevi tekli nesne ilevine % arlanr, alandaki !elerin herbiri da anak alnan pers)n ile karlatrlr# 8te &)%ntSi+- / ilev arsnn tamam* !o%nt$i#(pAe!tor.&egin( ), pAe!tor.end( ), &ind1nd(greater->erson*( ), re#eren!e>erson)) E? 6ersle i&iler klem ilevinin gereklik -tr%e ile +alse erdeitirmek/ deerini deitiren % arla & ilevlerdir# Uadem ki tekli ve iki&i klem ilevler var ) "aman iki tane de tersle i&i % arla & ilev b%l%n%r* n)tD- / tekli -%nar / nesne ilevler ile k%llanlan tersle i&idir, n)tE- / ise iki&i -binar / nesne ilevler ile k%llanlan tersle i&idir# Ter belli bir hede+ pers)n % ama an ve&t)r4Kers)n5 daki !e sa sn elde etmek istersek baka seeneklerde b%l%n%r* WW 8stenen karlatrma d)r%dan apan iki&i klem k%llanm* !o%nt$i#(pAe!tor.&egin( ), pAe!tor.end( ), &ind1nd( ess$eT%a ->erson*( ), re#eren!e>erson)) WW n)tE- / ile beraber greater- / k%llanm* !o%nt$i#(pAe!tor.&egin( ), pAe!tor.end( ), &ind1nd(not1(greater->erson*( )), re#eren!e>erson))

WW n)tD- / ile beraber bindEnd- / k%llanm* !o%nt$i#(pAe!tor.&egin( ), pAe!tor.end( ), not1(&ind1nd((greater->erson*( )), re#eren!e>erson))) 'ada nesne ilevleri tamamla & tersle i&i % arla & ilev !rnei vere&ei"* BBC$@dCters)#&pp BBnegat)r !rnei .in! %de -iostream* .in! %de -#%n!tiona * .in! %de -ve!tor* .in! %de -a gorithm* %sing namespa!e std/ int main(int arg!, !har00 argv)< int iMrrC D,<1, 1, 5, 8, 9, :, F, d, e, 17I/ !o%t--!o%nt$i#(iMrr, iMrr+17, &ind1nd( ess$eT%a -int*( ), :)) --end / !o%t--!o%nt$i#(iMrr, iMrr+17, &ind1nd(not1(greater-int*( )), :)) --end / !o%t--!o%nt$i#(iMrr, iMrr+17, not1(&ind1nd(greater-int*( ), :))) --end / IJJJHK BBretilen ktC > > > BB (imdi merak edebilirsini" hepsi a n s)n%&% veri )rsa, b%nlarn en h"ls hangisiQ# =)r%dan nesne ilevinin k%llanld ilk aklamda, &)%ntSi+- / tara+ndan her ineleme iin iki e lem gerekletirilir* WW bala &nn )perat)r- /- / arlr# WW int deerler iin 4. ilemi aplr#

n)tE tersle i&isinin k%llanld ikin&i aklamda, tamamla & mantk % arla & ilevinin gereklik deeri terslenir, &)%ntSi+- / tara+ndan her ineleme iin e lem gerekletirilir# WW bala &nn )perat)r- /- / arlr# WW tersle i&inin )perat)r- /- / arlr# WW int deerler iin 5 ilemi aplr# $ala &nn gereklik deerini tersle en n)tD tersle i&isinin k%llanld n& aklamda, &)%ntSi+- / tara+ndan her ineleleme iin e lem aplr# WW tersle i&inin )perat)r- /- / arlr# WW bala &nn )perat)r- /- / arlr# WW int deerler iin 5 ilemi aplr# $%radan g!re&eini" gibi en h"ls ilk aklamdr# 7AU g++ derle i&isinin k%llanld eski bir bilgisa arda ilk aklam dier ikisinin her birinin aklak jd@ inde ilemi tamamlamtr#

Bit i2 em erinde k% an3 an nesne i2 ev er


9%karda nesne ilevler in&elenirken ba" ilelerin )lmad hemen g!"e arpmaktadr* bit ilemleri iin k%llanlabile&ek !ntanml nesne )kt%r# $%n%nla birlikte var)lan !ntanml nesne ilevleri ile, b%nlar ina etmek ")r deildir# 'adaki !rnekler bit ve -)perat)rV- / / aran nesne ilevi ile teki deil -)perat)rJ- / / aran nesne ilevini gerekletiren kalp sn+lar g!stermektedir# <teki ileler iin ben"er nesne ilevlerinin gereken almalar )k%ra braklmtr# :ira la+n tamam aptala s! lenir# 8te bit ve aran nesne ilevinin % g%lamas* BBC$@dCbitve#&pp BB)perat)rV- / k%llanm .in! %de -#%n!tiona * temp ate -t"pename $Pp* str%!t &it$andH p%& i! stdHH&inar"$#%n!tion-Pp, $Pp, $Pp*< $Pp operator( ) (!onst $Pp6 $$', !onst $Pp6 $$") !onst<

ret%rn $$'6 $$"/ I I/ (imdi de )perat)rJ- / aran nesne ilevinin % g%lamas* .in! %de -#%n!tiona * temp ate -t"pename $Pp* str%!t &it$notH p%& i! stdHH%nar"$#%n!tion-$Pp, $Pp*< $Pp operatorK( )(!onst $Pp6 $$') !onst< ret%rn K$$' / I I/ (imdi tek sa lar int ve&t)r nden bitSand- / k%llanarak kaldran bir pr)gram !rnei verelim* BBC$@dCtek )k#&pp BBbitSand- / k%llanm .in! %de -iostream* .in! %de -a gorithm* .in! %de -ve!tor* .in! %de =&itand.h? %sing namespa!e std/ int main( )< ve!tor-int* vi/ #or(int id',7/ id'-17/ ++id') vi.p%sh$&a!k(id')/ !op"(vi.&egin( ), remove$i#(vi.&egin( ), vi.end( ), &ind1nd(&it$and-int*( ), 1)), ostream$iterator-int*)(!o%t, = =))/ !o%t--end / IJJJHK BBretilen ktC @EG>` BB

cer daim k% an3 an ar


$% b!lmde anlata&aklarm" CBC++ pr)gram&snn gndelik ha atn k)la latran genel ardm&lardr# $%nlar* WW )k sk rastlanlan g!revleri erine getiren basit, kk sn+ ve ilevler# WW )k sa da genel tip# WW $a" !nemli C ilevleri# WW Kr)gramlarda tiplerin rakam snrlar# $%nlarn )% C++ standartlarnda 4%tilities5 bal altnda tanmlanmlardr# <tekiler ise a ktphanenin ana b!lmlerinde er alr ve a C ile gemiten kalan balantlar vardr# <rnek )larak* alg)rithm bal altnda b%l%nan ba" ardm& ilevler, alg)ritmalarla hi ilgileri )lmamasna ramen )rada tanmlanmlardr# $a"lar da a r&a C++ dili standart ktphanesinde k%llanlr# $%na !rnek )larak pair tipi verilebilir# Kair ile iki deer ihti a d% %ld%%nda tek birim )larak ilemlenebilir# -bir ilev, iki deer d!ndrmek ")r%nda kaldnda k%llanlabilir/

)pair) ka&3
pair )ld%ka basit bir kap sn+tr# $irin&i -+irst/ ve ikin&i -se&)nd/ ad verilen iki !e i dep)lamakta k%llanlr# 8te b% kadar basit# Kair kaplar k%llanlmadan !n&e pr)gramn"a aadaki !nilemle i&i !nergesi eklenmelidir* .in! %de -%ti it"* Standart kalp k!eli a ra g!sterimi k%llanlarak, pair deikeni tanmland -ve a bildirildii/ "aman, pair veri tipleri belirlenir# 8te

!rnek* pair-string, string* piper(=>M1d?, =>c4MV;?)/ pair-string, string* !essna(=C1F1?, =>c4MV\?)/ $%rada piper ve &essna pair deikenlerinde iki tane string veri tipi b%l%nmaktadr# 3er iki string i a"drmak iin pair tipinin +irst ve se&)nd alanlar k%llanlr* !o%t--piper.#irst--end -!essna.se!ond--end / BBK'E` a"ar BBK3?'A7 a"ar

+irst ve se&)nd eler eniden atamada da k%llanlabilir* !essna.#irst,?C191?/ !essna.se!ond,?>c4MVR?/ pair nesnesinin tamamna eniden atama ")r%nl%l%% d)arsa, atama ile&inin sa tara+nda an)nim bir pair nesnesi k%llanlabilir# $%rada an)nim deiken ads" gei&i bir deikeni, a n tipte baka bir deiken - eniden/ atamak ama& la tanmlanr# 6emel a"mn kalb aadaki gibidir* t"pe(&a2 atma istesi) pair nesnesi k%llanld "aman, sade&e pair kap adnn belirtilmesi ile tip belirtimi tamamlanma"# ' r&a pair de b%l%nan veri tiplerinin de belirtilmesi gerekir# $% "den ine kalplarn al a ra& k%llanlr# <rnek )larak, &essna pair deikeninin eniden atamas aadaki gibi aplr* !essna,pair-string, string*(=C191?, =>c4MVR?)/ $en"er d%r%mlarda ba"en tip belirtimi )ld%ka kark )labilir, b% "den t pede+ anahtar kelimesinin imkanlarn k%llanmak ararldr# Ka nak k)dda )k sa da pair4t peD, t peE5 k%llanlrsa, ) "aman b%n%n iin t pede+ aklamasn k%llanmak daha akll&adr* t"pede# pair-string, string* pairStrStr/ !essna,pairStrStr(=C191?, =>c4MVR?)/

$%nlardan baka -atama, karlatrma hari/ pair daha +a"la ileviklik tama"# $%n%nla birlikte map, m%ltimap ve hashSmap in temel %ns%r%d%r#

S'p i!it
TZpli&it anahtar kelimesi k%llanld "aman, tek deikenli ap& ilevin kendiliinden tip evrimi apmas engellenmi )l%r# $% !"elliin k%llanld tipik !rnek )larak, t)pl%l%k sn+nn ap& ilev deikenine aktarlan b) %t deeri ele alnabilir# <rnein bir tn b) %t deerini ap& ilevin deikeni app bildirebilirsini"* ! ass Sta!k< e'p i!it Sta!k(int size)/ ..... I/ BBilk b) %t% ile t )l%t%r

9%karda eZpli&it anahtar kelimesinin k%llanm )ld%ka !nemlidir# Ter b%rada ap& ilevi eZpli&it k%llanmadan a"a&ak )l%rsak int ten Sta&k e kendiliinden evrim )l%r# $! le&e Sta&k e int atamas aplabilir# Sta!k s/ ### s,97/

BB3))p d%r adam e"d%k# H@ !eli eni bir Sta&k )l%%r# BBs e atanr#

Kendiliinden tip evrimi H@ i, H@ !eli bir t -Sta&k/ haline getirir# 3erhalde b% si"in !n&eden planladn" bir e deildi# Si"in int ap& ilevi eZpli&it )larak tanmlaman" -eZpli&it Sta&k-int si"e// sa esinde, b! le bir atama )ld%%nda pr)gram derlenirken hata iletisi alnr# 9ani aptn" iin hatal )ld%%n% anlarsn"# $ir e daha ekle elim* atama aplrken )rta a kan tip evriminde de eZpli&it etkilidir# Sta!k s1(:7)/ Sta!k s1,:7/ BB% ar, tamam BB)lma", hatal

$%n%n nedeni aradaki )k kk +arktr*

_ '/ N "(')/ ve _ '/ N ",'/

BBeZpli&it -aleni/ evrim

BBi -gi"li&e/ evrim

<rnekler arasndaki +ark k)n% % daha anlaman" salar#

Bitset s3n3#3 ve &it i2 em eri


$it ler bir bilgisa arda b%l%nan bilginin en kk birimidir# $itler iki&idir -binar /# 9ani iki d%r%m% vardr# (%nlar temsil etmek iin k%llanlabilir* d)r%B anl, akBkapal, evetBha r, dav%lB"%rna a da tr%eB+alse# $it ler daha b k veri tipleri iin birara a getirilirler# <rnek* bir ba t -b te/ ` bit ten )l%%r# =ier veri tipleri ise, ba tlarn birleiminden )l%%r# Kr)gramlarn bir)% d)r%dan bitlerin ilemlenmesine gerek d% ma", ve ba" diller de bit d"e inde ilemlere i"in verme"ler# 'ma ba" alanlar vardr ki bit d"e inde ilemler gerekir* D? 'ra sr&leri E? Neri sktr&lar F? 7!rntler G? 6abii ki bilgisa arn"

MraO sr! eri


'ralarn bir)%nda !rnein ara " kartlar, hardisklerde d%r%m ve denetim ka dedi&ileri b%l%n%r# =enetim ka dedi&isindeki belli bitler s+r ve a bir aplarak aralar denetlenir# 'ralarn ) an ki d%r%mlarn saptamak iin ise, d%r%m ka dedi&isinin bitlerine baklr#

Aeri s3k32t3rma

int ve +l)at gibi erleik veri tipleri )k sa da ba t tan )l%%r# 3er ba t ta ` bitten )l%m%t%r# $ k b) %tl% bilgiler karmak alg)ritmalar % g%lanarak daha kk b) %tl% hale getirilebilir, b%na sktrlm veri denir, daha s)nra skk veri gerektii "aman tekrar ilk haline hibir veri ka b )lmadan evrilebilir# $% % g%lama genellikle iki d%r%mda aplr* ilki d)s alar daha kk b) %tl% hale _in"ip ve a _inrar -UniZ te ise &)mpressed/ ile getirmek, ikin&i k%llanm ise b k b) %tl% verilerin bir erden dierine aktarlmas d%r%m%d%r# 'rtan miktarda veri sabit genilikli banttan -havadan ve a telden/ aktarld "aman sktrlmas gerekir# 7!nderme %&%nda aplan sktrlma daha +a"la veri aktarlmasn salar, alma %&%nda ise skk veri alarak esas haline, ani altrlabilir hale getirilir# Neri aktarmnda k%llanlan sktrma alg)ritmalarnn bir arar da, hata alglamalar ve hata d"eltebilmeleridir#

\Lrnt er
$ilgisa ar g!rntsndeki her n)kta bir piksel deerini temsil eder# Si ah be a" bir g!rntde her piksel birden +a"la bit ile tanmlanan bir )%nl%a sahiptir# <rnein* tam si ah bir piksel @ -s+r/ deer ile tanmlanrken, tam be a" bir piksel ise EHH -`? bitlik/ ile g!sterilir# Kiksel )%nl%k deerleri bitler halinde saklanr# ]enkli piksellerde a n ekilde l gr%plar halinde bitler )l%t%r%larak aplr# 9ani bir piksel tane sa ile temsil edilir, ve b% sa lar genellikle bitler halinde saklanr# ]7$ -krm"? eil?mavi/ di e adlandrlan renklendirme biiminde, b% ana rengin derleri sa larla aklanarak, belli bir n)ktadaki ekran piksel rengi belirlenir#

Bi gisa"ar
Old%ka karmak iler aptklar i"lenen bilgisa arlarn aslnda etenekleri )ld%ka snrldr# Tn alt d"e de apabildikleri sade&e bit ilemleridir# $itleri eklerler, terslerini alrlar, ve iki biti karlatrrlar# $%nlarn "erinede H@?D@@ arasnda assembl ilemi b%l%n%r# $% ilemler ba tlar ve kelimeler ile aplr# ;st sevi eli diller hep b% assembl makina dili "erine ina edilmitir# U g%lama pr)gramlar ve iletim sistemleri st sevi eli pr)gramlama dilleri ile a"lr# 9ani bilgisa arn"daki ha alet, st sevi eli dille aslnda ne demek istendiini bilir#

Bit i2 em eri
Bit &iOim i ve (6) Bit1 Bit1 son%O @ @ @ @ D @ D @ @ D D D BBC@dCbitve#&pp BBbit_ise and -V/ .in! %de -iostream* %sing namespa!e std/ int main( )< %nsigned short stat%s[egister / %nsigned short ! earBits / stat%s[egister,7'U1 / BBba" bitler D apld - ani set edildi/ ! earBits,7'7a / BBsade&e st rakamlar s+rla - ani &lear et/ !o%t--he'--?Stat%s [egisterH ?--stat%s[egister--end / stat%s[egister,(stat%s[egister6! earBits) / !o%t--he'--?Stat%s [egister C earedH ?--stat%s]egister--end / ret%rn 7/ IJJJHK BBretilen ktC Stat%s ]egisterC dD Stat%s ]egister ClearedC D BB 8lemi in&ele elimC OZ=D. DD@D@@@D OZ@Y. V@@@@DDDD ??????????????? @@@@@@@D 9%kardaki stat%s]egister.-stat%s]egisterV&lear$its/* i+adesini stat%s]egisterV.&lear$its* eklinde de a"abilirsini"#

Bit &iOim i ve"a ( Z ) Bit1 @ @ D D Bit1 @ D @ D Son%O @ D D D

(imdi de ara " kartnn denetim ka dedi&isi k%llanla&ak# Ciha"n istenen k)n%mda )labilmesi iin denetim ka dedi&isinin birin&i, ikin&i ve edin&i bitleri D )la&aktr# BBC$@dCbitve a#&pp BBbit_ise )r - a / k%llanm .in! %de -iostream* %sing namespa!e std/ int main( )< %nsigned short !ontro [egister / %nsigned short setBits / !ontro [egister,7'77 / BBbtn bitler s+rland - ani &lear edildi/ setBits,7'd5 / BBF tane bit bir apld - ani set edildi/ !o%t--he'--?Contro [egisterH ?--!ontro [egister--end / !ontro [egisterZ,setBits / !o%t--he'--? Contro [egister Bas ati diH =--!ontro [egister --end / ret%rn 7/ IJJJHK BBretilen ktC C)ntr)l ]egisterC @ C)ntr)l ]egister $aslatildiC `F BB @Z@@. @@@@@@@@ a@Z`F. @D@@@@DD ???????????? @D@@@@DD Bit &iOim i _`[ (i)

Bit1 44444 7 7 1 1

Bit1 44444 7 1 7 1

Son%O ar 444444444444 7 1 1 7

BBC$@dCbiteks)r#&pp BBeZ)r and k%llanm .in! %de -iostream* %sing namespa!e std/ int main( )< %nsigned short # ag1/ %nsigned short # ag1/ %nsigned short # ag5/ # ag1,7'7a/ # ag1,7'a7/ # ag5,# ag1i# ag1/ JJ# ag1 i e # ag1 aras3ndaki #ark 3 &it erin &% %nd%G% "er eri sapta !o%t--he'--?# ags1H =--# ag1--end / !o%t--he'--?# ags1H =--# ag1--end / !o%t--he'--?# ags5H =--# ag5--end / ret%rn 7/ IJJJHK BBretilen ktC +lagsDC + +lagsEC +@ +lagsFC ++ BB @Z@+. @@@@++++ @Z@+.k++++@@@@ ???????????? ++++++++ Bit &iOim i deGi (K) $it S)n% ??? ???????

@ D D @ BB$@dCbitdegil#&pp BBnegati)n k%llanm .in! %de -iostream* %sing namespa!e std/ int main( )< %nsigned short # ag1/ %nsigned short # ag1/ # ag1,7'77CC/ # ag1,K# ag1/ !o%t--he'--?# ag1H =--# ag1--end / !o%t--he'--?# ag1H =--# ag1--end / ret%rn 7/ IJJJHK BBretilen ktC +lagDC && +lagEC ++FF BB @ZCC. @@@@@@@@DD@@DD@@ ++FF . DDDDDDDD@@DD@@DD 7!rld "ere bitler terslenmi )l%r# Kr)gram&lk aleminde en sk hatalardan biri mantk ileleri ile bit ilelerini birbirine kartrmaktr# Uantk ileleriC VV-mantk ve/, aa -mantk ve a/, M-mantk deil/ dir# $it ileleri iseC V -ve/, a-ve a/, ile J -deil/ dir# Si" kartrmamak iin dikkatli )l%nMM### (imdi her ikisi arasndaki +ark g!steren, basit bir !rnek verelim* BBC$@dCdikkatliS)l#&pp BBbit ileleri ve mantk ileleri arasndaki +ark ^in&l%de 4i)stream5 %sing namespa&e std* int main( )< %nsigned short # ag1/ %nsigned short # ag1/ # ag1,7'77aa/ # ag1,7'aa77/ !o%t--?&it(ise operatorH =--(# ag16# ag1)--end /

!o%t--? ogi!a operatorH =--(# ag166# ag1)--end / ret%rn 7, IJJJHK BBretilen ktC bit_ise )perat)rC @ l)gi&al )perat)rC D BB Uantk ile&i asndan bakldnda, her iki ilenenin deeri, @ -s+r/ dan +arkl )ld%% iin -d)r%.tr%e/ )ld%% kab%l edilir# $%ndan d)la * -d)r%/VV-d)r%/.d)r% -mantk ilelerine g!re/ $it ilelerine g!re in&elediimi"de ise bitlerin a n n)ktalarda deerleri a n anda XD[ )lmad iin, her bitin birbiri ile arpm -ve lenmesi di ebiliri"/ s+r deerini retir# @Z@@YY. @@@@@@@@DDDDDDDD @ZYY@@. DDDDDDDD@@@@@@@@ So a ka"d3rma -44 iareti bitleri belitilen sa da s)la ka drr# (imdi basit bir !rnekle g!sterelimC 8lem ??????? %nsigned sh)rt bitve&t.@ZG@`Y bitve&t44D bitve&t44F 'klama ???????????? 8lk deer s)la bir basamak ka dr s)la basamak ka dr S)n% -iki&i )larak/ ???????????????????????? @D@@@@@@D@@@DDDD D@@@@@@D@@@DDD@ @@@@D@@@DDD@@@@

'sada basit bir pr)gram !rneiC BBC$@dCka dir#&pp BBle+t shi+t

.in! %de -iostream* %sing namespa!e std/ int main( )< %nsigned short &itve!t,1/ #or(int i,7/ i-17/ ++i)< !o%t--&itve!t--end / &itve!t,&itve!t--1/ BBs)la ka drma ile&ini &)%t ile k%llanlan er BBile&i ile kartrma n, bitve&t44.D de a"abilirdini" I ret%rn 7/ IJJJHK BBretilen ktC D E G ` D> FE >G DE` EH> HDE BB 7!rdn" gibi s)la bir bit ka drma iki ile arpma a edeer# SaGa ka"d3rma ** Saa ka drma ileminde dikkate alnmas gereken en !nemli k)n%* signed ve %nsigned sa larda en baa eklene&ek sa dr# 8aretli sa larda en bata er alan bit, sa iaretini belirtir# $% bit D ise sa nn negati+ )ld%%n% @ -s+r/ ise p)"iti+ )ld%%n% g!sterir# 8aretsi" -%nsigned/ sa larda en bataki bit m%tlak deere aittir# 8aretli -signed/ sa larda en bataki bit, iareti belirtir# S+r ise p)"iti+, bir ise negati+tir# 8aretsi" -%nsigned/ sa larda saa ka drma ilemi a n s)la ka drma gibi aplr tabii bir +arkla* b% se+er bit katar saa d)r% !telenir, s)l tara+tan ise s+r eklenir# 8aretli -signed/ sa larda ise en bata eer D -bir, ani negati+ sa / varsa s)ldan D -bir/ eklenerek, bit katar saa !telenir# 9)k eer en bata @ varsa ani p)"iti+ sa ise, s)ldan s+r eklenerek bit katar saa !telenir#

(imdi iaretsi" sa k%llanarak saa ka drma !rnei verelim* BBC$@dCsagaka #&pp BBright shi+t 55k%llanm .in! %de -iostream* %sing namespa!e std/ int main( )< %nsigned short &ve!,1718/ #or(int i,7/ i-19/ i++)< !o%t--&ve!--end / &ve!**,1/ I ret%rn 7/ I BBretilen ktC D@EG HDE EH> DE` >G FE D> ` G E D @ @ @ @ BB $%radan g!rdn" "ere saa ka drma E e b!lme demektir# (imdi de b%ra a kadar g!rdm" bit ilemlerini, saa ve s)la ka drma ve mantk ilelerini bit katarnda b%l%nan bitlere % g%la alm# $! le&e bit katarnda b%l%nan herhangi bir biti, silebilir -&lear/, deerini bir -set/ apabilir ve a sna abiliri" -test/# Uetr) istas )n%nda kim asal kalntlar test eden bir sistem tasarla alm# D@ tane algla &m" )ls%n, b%nlar D@ bit k%llanarak g!sterelim# D -bir/

belli bir algla & etkinletirsin, @ -s+r/ algla & d%rd%rs%n# =%rd%rma ilemi algla &da hata ve a a ar b)"%kl%% )ld%%nda aplr# $! le&e, d%rd%rma anl bilgilenme i ve anl k)m%tlar engeller# 'lgla & bitlerini bit katarnn D n%maral eri ile D@ n%maral erleri arasna k) alm# 9ani s+rn& eri atla alm# K)dlama ve d"enleme daha ak )l%r# $alangta btn algla &lar ak -)++/ d%r%m%ndadr# %nsigned short int sensors,7/ =aha s)nra her algla &nn a arlar snanr, ve % g%n )lanlar etkinletirilir# #or(int i,1/ i-17/ i++)< i#(isCa i&rated(i))< sensorsZ,(1--i)/ I I $%rada* -D44D/.@@@@@@@@@@@@@@D@ -D44E/.@@@@@@@@@@@@@D@@ -D44F/.@@@@@@@@@@@@D@@@ ve b! le devam eder# 8lgili bit in ve a ilemine tabi t%t%ld%% d%r%mda, a arl algla & D e set edilmi )l%r# (imdi b% alglama di"gesinde b%l%nan H n%maral algla &nn, ar par+ml bir kadnn k)k% kalntlarndan d)la a ar b)"%lm% )ls%n# =i"gemi" b%n% alglar ve H n%maral algla &nn etkinliini )rtadan kaldrr# Keki b% nasl aplrQ# $ire s+r ile XNT[ -'A=/ aplrsa, s)n% s+r )l%r# $%ndan ararlanarak bi" algla & bit katarm" DDDDDDDDDD@DDDDD ile NT -'A=/ aplrsa H# algla & kapatlr# 9%kardaki -D44H/ ileminden @@@@@@@@@@D@@@@@ elde edilir# $i" b% ilemi terslersek -J-D44H// istenen s)n% DDDDDDDDDD@DDDDD salanr# 8stenen aadaki ilemdir* sens)rsV.J-D44H/* Kalnt alglanan i in&i algla &nn ani sens)r i nin erini g!steren aklama*

%nsigned sh)rt int dete&ti)ns.@* (imdi b% kadar a rnt verdikten s)nra hemen belirtelim, aslnda bi"im elimi"de bitset gibi bir SKK sn+ b%l%nmaktadr# 9apmak istediimi" hertrl bit ilemini )n%nla apabiliri"# $it vekt!rlerini bitset sn+ ile k%llanmak )k k)la dr# $itset e ilevleriC ??????????????????????? an"( ) !o%nt( ) # ip( ) # ip(pos) none( ) reset( ) reset(pos) set( ) set(pos) test(pos) 'ma&C ????????????????????????? 3erhangi bir bitin D )l%p )lmadn snar D )lan bit sa sn verir Uantki tersler ve a btn bitleri tersler Uantki tersler ve a eri verilen biti tersler 3ibir bit D deilse tr%e ani d)r% deer retir $tn bitleri s+r apar 9eri verilen biti s+rlar $tn bitleri D apar 9eri verilen biti D apar 9eri verilen biti snar <rnekC ???????????????????????? sensors.an"( ) sensors.!o%nt( ) sensors.# ip( ) sensors.# ip(8) dete!tions.none( ) dete!tions.reset( ) dete!tions.reset(9) dete!tions.set( ) dete!tions.set(5) dete!tions.test(F)

$itset sn+ ilelerin )%na bindirim apar, ) "den ilemler bildiimi" gibi aplabilir# 8te bitset sn+ ile !rnek* BBC$@dCbit er#&pp BBbitset sn+nn k%llanm .in! %de -iostream* .in! %de -&itset* %sing namespa!e std/ int main( )< &itset-1:* sensors/ &itset-1:* dete!tions/ sensors.reset( )/ dete!tions.reset( )/ JBa ar sna ve algla &lar a

#or(int i,1/ i-,17/ i++)< i#(isCa i&rated(i))< sensors.set(i)/ I I BBaltr, )rtam sna .... ... BBkalnt varm bak #or(int i,1/ i-,17/ i++)< i#(dete!tions.test(i))< !o%t--?BWVW \SC?--end / I I ret%rn 7/ IJJJHK 7!rdn" gibi bitset sn+ ile b% iler ne kadar basit#

^3kt3 dzen eme eri (BiOem er)


&)%t nesnesini k%llanarak ktlar istenilen biimde d"enlemek mmkndr# $%nlar gerekletirebilmek iin, stdCCi)sSbase e ilevlerini k%llanarak ilgili ba raklar D aplr# <rnek* BB$@dC+)rmatla#&pp BBbiemleme !rnei .in! %de -iostream* int main( )< stdHH!o%t.set#(stdHHios$&aseHHright, stdHHios$&aseHH&ase#ie d)/ stdHH!o%t.(idth(17)/ stdHH!o%t--?Pest?--stdHHend / ret%rn 7/ IJJJHK BBretilen ktC 6est

BB &)%t ile a arlanabilen ba raklarC skip(s ?????????? 7irdide b)l%klar atla e#t ?????????? =eerin sa tara+n b) brak right ?????????? =eerin sa tara+n b) brak interna ?????????? =eerle iaret arasn b) brak &oo a pha ????????? =)r% ile anl imge ile g!ster de! ?????????? D@ tabanl g!ster he' ?????????? D> tabanl g!ster o!t ??????????? ` tabanl g!ster s!ienti#i! ?????????? Ka an n)ktal g!ster d#ddddTdd #i'ed ?????????? d#dd sho(&ase ???????? 6aban !nek eklinde g!ster* @ ve a @Z gibi sho(point ??????? 'rkadan gelen @ lar a" sho(pos ??????? K)"iti+ deerler iin + g!ster %pper!ase ??????? e ve Z erine T ve l k%llan adQ%st#ie d ??????? 'lan a ar ile ilgili ba rak &ase#ie d ???????? =)al sa taban ile ilgili ba rak # oat#ie d ???????? Ka an n)ktal sa ile ilgili ba rak %nit&%# ???????? 3er ilemden s)nra kt b)alt $% ba raklar aadaki ekilde e ilevlerle k%llanlarak ilemlenirler* # ags(#mt# ags #) BB ba raklar D ap -Set +lags/ set#(#mt# ags #) JJ ba ra t)pla ('dd +lag/ set#(#mt# ags #, #mt# ags mask ) BB ba ra ekle -'dd +lag/ %nset#(#mt# ags mask) BB ba raklar s+rla -Clear +lags/ (idth( ) BB genilii al -7et +ield _idth/ (idth(streamsize (ide) BB alan geniliini belirt -Set +ield _idth/ #i ( ) BB erletirile&ek karakteri al -7et +iller &hara&ter/ #i (Ch !h ) BBkarakteri erletir -Set +iller &hara&ter/ pre!ision( ) BBhassasi eti al -7et pre&isi)n/ pre!ision(streamsize n ) BBhassasi eti a arla -Set pre&isi)n/ $aka bir seenek )larakta kt !"elletiri&ileri k%llanlabilir*

BBC$@dC&ikti)"el#&pp BBmanip%lat)r k%llanm .in! %de -iostream* .in! %de -iomanip* int main( )< stdHH!o%t--stdHHsetios# ags(stdHHios$&aseHHright) --stdHHset((17)--?Pest?--stdHHend / ret%rn 7/ IJJJHK BBretilen ktC 6est BB <"elletiri&ileri k%llanmak, ba raklar tek tek a arlamaktan daha k)la , daha ak ve daha basittir# 4i)s5 4i)stream5 ve 4i)manip5 te b%l%nan ba" !"elletiri&iler %nlardrC &oo a pha no&oo a pha sho(&ase nosho(&ase sho(point nosho(point sho(pos nosho(pos skip(s noskip(s %pper!ase no%pper!ase e#t right interna de! he' o!t #i'ed s!ienti#i! end BB &)%t#set+ - i)sSbaseCCb))lalpha / BB &)%t#%nset+ - i)sSbaseCCb))lalpha / BB &)%t#set+ - i)sSbaseCCsh)_base / BB &)%t#%nset+ - i)sSbaseCCsh)_base / BB &)%t#set+ - i)sSbaseCCsh)_p)int / BB &)%t#%nset+ - i)sSbaseCCsh)_p)int / BB &)%t#set+ - i)sSbaseCCsh)_p)s / BB &)%t#%nset+ - i)sSbaseCCsh)_p)s / BB &)%t#set+ - i)sSbaseCCskip_s / BB &)%t#%nset+ - i)sSbaseCCskip_s / BB &)%t#set+ - i)sSbaseCC%pper&ase / BB &)%t#%nset+ - i)sSbaseCC%pper&ase / BB &)%t#set+ - i)sSbaseCCle+t, i)sSbaseCCbase+ield / BB &)%t#set+ - i)sSbaseCCright, i)sSbaseCCbase+ield / BB &)%t#set+ - i)sSbaseCCinternal, i)sSbaseCCbase+ield / BB &)%t#set+ - i)sSbaseCCde&, i)sSbaseCCbase+ield / BB &)%t#set+ - i)sSbaseCCheZ, i)sSbaseCCbase+ield / BB &)%t#set+ - i)sSbaseCC)&t, i)sSbaseCCbase+ield / BB &)%t#%nset+ - i)sSbaseCC+iZed, i)sSbaseCC+l)at+ield / BB &)%t#%nset+ - i)sSbaseCCs&ienti+i&, i)sSbaseCC+l)at+ield / BB ,Pn, k) ve b)alt -p%t ,Pn, and +l%sh/

ends # %sh (s

BB ,P@, k) -p%t ,P@,/ BB ak b)alt -+l%sh stream/ BB b)l%% kaldr -eat _hitespa&e/

resetios# ags(#mt# ags #) BBba raklar -@/ s+rla -Clear +lags/ setios# ags(#mt# ags #) BBba raklar -D/ bir ap -Set +lags/ set&ase(int &ase) BBsa taban -integer base/ set#i (int !h) BBb) kalan erleri &h d)ld%r -Yill padding _ith &h/ setpre!ision(int n) BB n digits )+ +l)ating p)int pre&isi)n set((int n) BBn alan genilii -neZt +ield _idth is length n/ $%nlardan deikenleri g!sterilme enleri aadaki gibi k%llanabilirsini"C BBC$@dCalma"#&pp BB!rnek .in! %de -iostream* .in! %de -iomanip* int main( )< int deg,115/ stdHH!o%t--deg--? =--stdHHo!t--deg--? = --stdHHhe'--deg--stdHHend / ret%rn 7/ IJJJHK BBktsn sen b%l /C hadi a"a mC )&t.DdF heZ.d$ Kr)gram& dilerse kendi !"elletiri&ilerini kendisi tanmla abilir ve b%nlar pr)gramnda g!nln&e k%llanabilir#

)m%ta& e) anahtar ke imesi


8lk kitabm"da m%table anahtar kelimesi ile ilgili bira" bilgi verilmiti# $% anahtar kelime eer bilinli k%llanlma"sa )ld%ka s)r%nlar karabilir# $% "den a rnt verme i % g%n g!rdk# &)nst e ilevler ve nesneler hakknda san )r%" eterli bilgini" vardr# C++ dili, bir ekilde ne &)nst ne de &)nst )lma an? anlam bakmndan? nesnelerin ina edilebilmesine imkan salamaktadr# U%table anahtar kelimesi k%llanlarak tanmlanm )lan veri eleri, &)nst e ilevler

tara+ndan deitirilebilir# U%table in k%llanl )ld%% d%r%ma bir !rnek )larak* &)nst bir nesnenin k%llanlma sa sn ka detmek istemesini verebiliri"# U%table sn+nn &)nst nesnesi iin inaata bala abiliri"# <rnee geelimC BBC$@dCs%st%r#&pp BBm%table !rnei .in! %de -iostream* .in! %de -memor"* .in! %de -string* ! ass M%ta& e< stdHHstring d$name/ m%ta& e int d$!o%nt/ BBm%table anahtar kelimesi p%&i!H M%ta& e(stdHHstring !onst6 name) H d$name(name), d$!o%nt( ) <I void !a ed( ) !onst< stdHH!o%t--?Ca ing?--d$name-= (attempt =--++d$!o%nt--?)En?/ I I/ int main( )< M%ta& e !onst '(=M%ta& e !onst nesne?)/ #or(int id',7/ id'-8/ id'++) '.!a ed( )/ BB&)nst nesne i deitir IJJHK BBretilen ktC Calling U%table &)nst nesne -attempt D/ Calling U%table &)nst nesne -attempt E/ Calling U%table &)nst nesne -attempt F/ Calling U%table &)nst nesne -attempt G/ BB m%table anahtar kelimesi, !rnek )larak* da an sa mlarn gerekletiren sn+larda )k +a dal )l%r# Uetin string lerinde da an sa mn gerekletiren bir sn+ dnelim# =a an sa mn apan nesne, &)nst bir nesne )lmaldr, ama sn+ k)p a ap& ilev tanmlamaldr# $ildiini"

gibi &)nst nesneler deitirileme", peki ) "aman k)p a ap& ilev da an sa mn aparken sa artn nasl gerekletire&ekQ# 8te tam b% n)ktada m%table anahtar kelimesi devre e girer# $! le&e nesne &)nst )lsa bile, sa deeri a"altlp )altlabilir# Tn s)n%nda b%rada bi"im s! le e&eimi"* hangi veri elerinin deitirilip deitirileme e&eine pr)gram&nn karar vere&eidir# $% m%table anahtar kelimesinin salad bir stnlktr# 'ma m%table anahtar kelimesinin bir de de"avantae b%l%nmaktadr* pr)gram&larn &)nst nesnelerle ilgili kesin kararlar almalarn engeller# $%ndan d)la &)nst nesnelerin kararl aplarndan %"aklalm )l%r# =%r%ma g!re b% ba"en s)r%n )l%r, ba"en de )lma"# U g%lamada m%table i re"ervas )nlarda ararl )l%r* m%table veri elerinin deerlerini d!ndren eriim&iler &)nst nesnelere sahip b% eriim&ileri k%llanan mterilere art& s)n%lar verirler# $% d%r%mlarda d!nen deerin tabiat ak ekilde belgelenmesi la"mdr# 6emel k%ral* $% k%raln dna kan )k ak bir neden )ksa m%table anahtar kelimesini k%llanma n#

$%ras b) brakld

d. BL m

&r Btphane er
CBC++ dillerinde standart ktphanelerin dnda )k sa da ktphane daha b%l%nmaktadr# $% ktphaneler genel amalara hi"met ettikleri gibi ba"lar da !"el amalara hi"met ederler# (imdi C++ dilindeki a gn )larak k%llanabile&ek, hen" standart )lmam !br ktphaneleri anlatalm# $% ktphaneler C++ standardn da geniletmektedir# 3en" C++ standardnda er alma an* alar -net_)rks/, pr)gram s%ratlar -7UO/, e anl pr)gramlar -&)n&%rren& /## vs k)n%larndaki b% ktphaneleri ksa&a in&ele elim# :aten ksa&a in&elemek ")r%nda ", "ira herbirinin a rntlar &iltlere sma"# $% ktphanelerin !"ellikle ak ka nak k)dl% )lanlarn setik# Sa"3 ar a i gi i o an ar $lit"++ ve UatriZ 6emplate Librar -U6L/ ktphaneleri st d"e

hesaplamalarda b k verimlilikle alrlar# valarra in )lmas gereken deerini g!sterir# Tn eski pr)eelerden )lan $lit"++, hesaplamalarda kalplarn stnlklerinden )lan, alma "aman ilemlerini derleme "amanna ka drmtr# $lit"++ de gl di"i, matriks sn+lar, ileler, ilevler ve altdi"iler vs## b%l%n%r# 6emel i iletirilmelerinden biri* $lit"++ di"ilerini ieren aritmetik ileler ve matematik ilevler deeri hemen hesaplama"lar# On%n erine nesne aklamalarn d!ndrrler# $ir nesne aklamas bir di"i e atand "aman , aklama hesaplanr, s)n%lar d)r%dan atamann hede+inde saklanr, b! le&e )k b k gei&i di"ilere gerek kalma"# U6L de verimlilikte i iletirme i salamak iin kalplar k%llanr# 9aklam daha "i ade SKK -standart kalp ktphanesi/ andran biimde, kaplar -UatriZ, Ne&t)r vs##/, inele i&ileri ve kalp alg)ritmalarn -transp)se, d)t vs/ k%llanr# MCS 'CT -'='K6ONT &)mm%ni&ati)n envir)ment/ U arlamal iletiim )rtam )l%p a, iletiim ve e anllkla ilgili imkanlar salar# 'CT )k b k bir ktphanedir, )k +a"la i apar# 'CT ktphanesini anlatan a rntl kitaplar b%l%nmaktadr -bakn" g))gle/# Tn !nemli !"ellii* e anllk ve a almalarnn birlikte b%l%nd%% tmleik bir at )l%t%rmasdr# CO]$' destei iin de 6'O -6he 'CT )rb/ vardr# Tn alt sevi ede de iletim di"gesine ara " apan aktarlabilir bir 'KO -appli&ati)n pr)gramming inter+a&e/ b%l%nd%r%r# $% 'KO nin stnde ise C++ !rt& sn+lar vardr# <rt&de % %m %ns%rlar -semaph)re ve m%teZ/, sreleraras iletiim %ns%rlar -'CTSSOCKSC)nne&t)r, 'CTSSOCKSYOYO ve 'CTSSOCKS'ddres/ ve eanllk %ns%rlar -Y%t%re ve Servant t%tak -thread/ sn+lar/ b%l%n%r# $ir st katman at )l%t%r%r# 8letiler 'CT % %m sn+lar ile btnleik )larak )la !nelimli biimde, ]ea&t)r ve Kr)a&t)r sn+larn&a d"enlenir# $% sevi ede 'CT Orb, CO]$' iin ap a btnletirilir# Ka nak k)dlarn bashingt)n niversitesinde aadaki adresten indirebilirsini"# ___#&s#_%stl#ed%BJd)& L`B]

'ndrei 'leZandres&% tara+ndan gelitirilmitir, sade&e bind)_s a g!re k%rg%lanmtr# 9ani UniZ srm b%l%nmamaktadr# Kalp paradigmasn en % n)ktasna kadar -hatta daha !tesine kadar/ k%llanmakta )l%p st pr)gramalamann da !"elliklerini )rta a karmtr# Ktphane i gelitiren 'ndrei tara+ndan a"lm )lan U)dern C++ design isimli kitapta, ktphane hakknda )k a rntl bilgi verilmitir# 'ma ben b% ktphane i k%llanma kimse e tavsi e etmem# B``SP Tskiden ga"in)larda sahne e en s)n ass)listler kard, evet b%rada da en s)na en i i ktphane kaldC $OOS6# C++ standartlar k)mitesinde b%l%nan ba" kiiler b))st ktphanesinin gelitirilmesinde bi""at er aldlar# $%n%n sebebi, C++ nn gele&ekte geliim d)r%lt%s%n% belirle ebilmekti# $! le&e $OOS6 )rta a kt# Ne sre hala devam edi )r# 3atta % an da bile $))st ktphanesinin ba" b!lmleri standartlara eklendi# $))st )k b k bir ktphane )l%p hemen hemen here i kapsar# $%nlarn arasnda tip biimlendirmelerinden k%aterni )nlara -d!rt b) %tl%larda sanal sa lar genelletirmek/, k)dlar b!lmelemeden d)r%sal &ebire, basit bellek k%llanm&s t%taklar -threads/ ve % %ma kadar here b%l%n%r# $))st a r&a C++ diline ilevik pr)gramlama paradigmasn eklemitir# 8levik pr)gramlama pr)gram alrken pr)grama ilev eklenmesini salar# 'slnda paradigmalar deni"i )lan C++ eni bir paradigma !"ellii daha ka"anm )l%r# $! le&e C++ s)r%n !"me eteneklerini daha da % n)ktalara vardrr# Kalp st pr)gramlama ise $))st %n C++ a bahiidir# Boost % in2a etmek ve k%rmak 'a girdiini"de $))st adresine bakn&a ina ve kleme bilgilerini hemen g!rrsn"# <n&e make e ben"e en $))st mam i k%rmalsn"# $% si"e $))st % k%rmakta )k b k k)la lk salar# =aha s)nra adaki admlar takip ettiini"de ite si"e $))st#

Btphane er zerine
Kitabm"n bandan beri gerek standart CBC++ ktphaneleri gerekse -s)n b!lmde/ !"el ktphaneler hakknda bilgi verdik# D# &ildimi"de de belirttiimi" gibi ktphaneler pr)gram& a b k k)la lk salar# Onlarn sa esinde pr)gram& bir)k k)d% a"maktan k%rt%l%r# $! le&e pr)eeler ksa srede gereklenir# 9ani i i bir pr)gram& hangi ktphanede ne i, nasl b%la&an bilir, ve pr)eesi ile ilgili )lanlar birara a getirir# $% sa ede pr)gram maksim%m verimle a"lm )l%r# Tdis)n lamba b%lm% si"in de b%lman"a gerek )k#

st >rogram ama (metaprogramming)


$elli bir )rtama k)la lkla % g%n hale getirilebilen di"gelere giderek artan talep )lmaktadr# $% % g%nl%a ek )larak, di"gelerin alma esnasnda kendilerini !"el d%r%mlara a arla abilme ihti a& da vardr# -) an ki i kne g!re, ha"r -&a&he/ bellek ilemlerini deitirmek gibi/# $% tr di"gelere % arlanm di"geler denir# U arlanmlk sade&e alma esnas ile ilgili deildir# =erlene&ek )lan di"ge e ardm& )lan ve kendiliinden k)d% % arla an -alg)ritmalar seerek/ ktphaneler b%l%n%r# (imdi st pr)gramlama terimlerini akla almC ;st pr)gramlama* kendilerini - ansma/ ve a !br pr)gramlar -!rnein* derle i&iler, )r%mla &lar, ve pr)gram reteleri/ temsil eden ve deitiren pr)gramlar a"maktr# ;st pr)gramlar kendilerini ve a !br pr)gramlar temsil eder ve a deitirirler# 9ansma ise, bir pr)gram alrken pr)gramn d%r%m%n% belirten ba" verilerin pr)gramn kendisin&e deitirilebilme eteneidir# 8ebak* bir pr)gramn g!"lem aparak kendi d%r%m nedenini )rta a karabilme etenei# 'ra&lk* bir pr)gramn kendi alma d%r%m%n% deitirmesi ve a, kendi )r%m ve a anlamna eni anlam katmasdr# ;st nesneler* !ntemlerin, alma tlarnn, sre gerekletiri&ilerin, ve aklak btn dil ve )n%n alma )rtamnn !eleri# ;st sevi e mimari* seilmi di"ge !"elliklerini sala an st sevi enin, ve ana sevi e % g%lama mantn kapsarken, a"lmn kendi +arkndaln sala an mimaridir# Ksmi alma* bir di"ge i i iletirmek iin k%llanlan teknik )l%p, bir ksm k)dlar bir gr%p veri girdisi ile de+alar&a altrlr, +akat b%rada girdi kmesinin bir ksm deiirken dier ksm sabit kalr# $% d%r%mda verinin sabit ksmna g!re, k)d%n !nalmas )ld%ka ararldr# C++ da st program ama

C++ standart ktphanesi gelitirilirken, derleme esnasnda stbilgi i temsil etme ihti a& )rta a kt# $% s)r%nlar !"gn kalp de imi ile !"ld# Kalp st pr)gramlama ile ilgili ilk a" DRRH lnda a"ld# OY4 5 de imi kalpta ilk denetim aps d# st program aman3n a t "ap3s3 C++ da st pr)gramlama balangta planlanm bir k)n% )lma p, daha "i ade derle i&inin s%istimali, ani h)r k%llanlmas s)n%&% )rta a kmtr# ;st pr)gramlamann k)dlar )ld%ka !"el ve anlalmas gtr# ' r&a st pr)gramlarn karmakl iin derle i&ilerin belirledii snrlandrmalar b%l%n%r# Nans3ma 9ansma a deiik diller deiik sevi elerde destek verir# C++ nn b% k)n%daki en !nemli !"ellii* alma srasnda tip saptamasdr -r%n time t pe identi+i&ati)n.]66O/# $%ndan baka C++ da anst& eklentileri de b%l%n%r -O$U s stem )bee&t m)del. O$U di"ge nesne m)deli/# ]ki sevi"e i di er 8ki sevi eli diller dn&esi d%raan st pr)gramlamann !nemli %ns%r%d%r# 8ki sevi eli dilde, d%raan k)d ile derleme srasnda deerler saptanr, dinamik k)d ise derlenir ve deerleri daha s)nra alrken saptanr# OSOB'ASO C++ da deikeni )lan sn+ ve ilevleri tanmlamak iin bir kalp mekani"mas belirlenmitir# $%na tip ve btn kalp deikenleri ve, ksmi ve tam kalp !"ellemeleri dahildir# Kalplar ve C++ nn !br !"ellikleri ile beraber C++ nn derleme "aman alt dili, tam 6%ring dili, )l%%r# -tam 6%ring dilinden kastedilen* ena" bir k)%l ve bir d!ngden )l%an dil demektir# $tn tam 6%ring dilleri )k gldr ve 6%ring makinesinin edeeridirler/# $% "den C++ dili iki sevi eli bir dildir# 'lt dilin tam 6%ring )lmasndan d)la , k%ramsal )larak b%n%nla here gerekletirilebilir# 6abii pratikte, derle i&i k)%llarndan !tr teknik snrlar b%l%n%r# 6emel derleme "aman k)%l% kalp !"ellemesidir* derle i&i bir)k

seenein dnda % g%n bir kalb semek ")r%ndadr# =erleme "aman d!ng aps kendini aran kalptr# - ani tanmnda sn+ kalplarnn bir esi k%llanlr/# =erle i&i b! le d"enekleri, kendi kendilerine artarak geniletmek ")r%ndadr# rnek er =%raan k)dlar k%llanan en a gn !rneklerden biri +akt!ri el hesaplamasdr# n+,1.1.5.8.9......(n41)n $ildik C++ +akt!ri el ilevi aadaki gibidir* int #a!toria (int n)< ret%rn (n,,7) X 1H n0#a!toria (n41)/ I $%na denk gelen derleme srasnda +akt!ri eli hesapla an d%raan k)d aada verilmitir* temp ate-int n* str%!t aa!toria < en%m<[SP,aa!toria -n41*HH[SP0nI/ I/ JJka 3p Lze e2mesi temp ate- * str%!t aa!toria -7*< en%m<[SP,1I/ I/ JBdikkat ]T6 ret%rn n ksaltlm halidir BBk%llanmC !o%t--?aa!toria (F), =--aa!toria -F*HH[SP--end / Ba 3p st program ama =erleme esnasnda hesaplarn aplmas ) kadar eki&i deildir, ama d%raan k)dlar k%llanarak dinamik k)dlar deitirmek )k daha ilgintir#

$% bir eit d%raan st pr)gramlamadr ve kalp st pr)gramlama a denk gelir# Kalpla st pr)gramlama bir)k kateg)ri e a rlabilir* WW 3esaplama tipleri ve sa lar iin st ilevler a"mak# WW ; e !"gnl, !"gn sn+lar, !"gn kalplar ve %val kalplar k%llanarak st bilgi i temsil etmek# WW =%raan denetim aplar k%llanmak# WW K)dlar reten st ilevler k%llanmak# WW 'klama kalplar k%llanp, tekleik )larak belli bir alana !"g diller gelitirmek# Ba 3p st i2 ev er Kalp st ilevleri dinamik k)d !elerinde -dinamik k)d%n st sevi esinde er alrlar/ ilem apan sn+ kalplardr# -Ya&t)rial4 5 ve a OY4 5 gibi/# ;st ilevler dier st ilevleri arabilirler# -a n, dier ilevleri arabilen ilevler gibi/# C++ da sa ile ilgili st ilevler, d)r%dan d)al - ani int /sa lar "erinde ilem apabilirler# :ira ka an n)ktal sa lar kalp deikeni ve a derleme srasnda sabit balat& )larak k%llanlama"# $%n%nla birlikte gerektiinde ka an n)ktal aritmetik, tam sa larn stnde ilemlenebilir# st &i gi ve Lzgn k er (traits) Kalp st pr)gramlarnda d%raan k)d -stati& &)de/ dinamik k)d "erinde ilem apar# =inamik k)d !elerini deitirmek iin !elerin ba" !"elliklerinin bilinmesi gerekir# -sa tipi ile beraber hassasi etini kapsa an deer aral gibi/# <"elliklere !"gnlk demek daha a gn ter&ihtir# <"gnlkler d%raan k)da tam sa sabitleri ve a tipleri )larak erletirilir# <"gnlkler ilgili )ld%klar tiplere ekilde balanrC WW ; e !"gnlklerC her !"gnlk aklad tipin sabiti ve a e tipi )larak tanmlanr# WW <"gnlk sn+larC a r bir sn+ta bir)k !"gnlk sarmalanr# WW <"gnlk kalplarC aile tiplerin !"gnlkleri -n%meri&Slimits4 5 gibi/ sn+ kalbnda tanmlanr#

N%va 3 ka 3p ar 6emel veri aplarna ilaveten, )k daha karmak derleme "aman veri aplarna da -listeler ve aalar gibi/ ihti a d% %l%r# $%nlar da %val kalplar k%llanlarak )k k)la bir ekilde temsil edilir# 9%val kalplara !rnek* Const-1, Const-1, Const-5, Const-e, Snd* * * * Bod retimi Kalp st pr)gramlar, derleme srasnda d!ngleri aarken, k)d paralarn kalplar birara a getirmek iin k%llanlabilir# $%, k)dlar belirli bir )rtama % g%n hale getirirken, st d"e de i iletirilmesine ve hale gelmesine )laar# Kalpla st pr)gramlama k)d seiminde !nilemle i&i !nergelerine -^i+de+ vs##/ g!re )k daha +a"la denetim salar# 6emel +ark* d%raan st pr)gramlama, denetlenen C++ pr)gramnda b%l%nan d%raan C++ veri i )r%mlar ve s)nra pr)gramda k%llanla&ak eni d%raan veri i hesaplar# <rnein derleme esnasnda deikenlere da al )larak k)d paralar birara a getirilebilirC ;a-(MM_$V`-M gorithmAariantMHHMM_$MLL`RSU*), M gorithmAariantM, M gorithmAariantB*HH[SPHHe'e!%te( )/ Ba 3p ar3 &irara"a getirme =erleme esnasnda temel tipler ve sn+ hi erarileri, )k sa da ba raa da al retmek iin, kalplar birara a getirilir# <rnekC t"pede# ;a-# ag,, istRithCo%nter, ListRithLengthCo%nter-List-S ementP"pe* *, List-S ementP"pe* *HH[SP [es% tList/ MO3k ama ka 3p ar3

'klama kalplar bir pr)gramlama tekniidir# 8lev ve ile arlar ieren C++ aklamalarna % g%n k)dlar retilmesini salarlar# $%nlarn sa esinde aadakiler gerekletirilebilir* WW =erleme esnasnda aklamalarn apsn alana !"g snamak# $% snamalar, C++ di"gelerinde bir ekilde aplama an snamalardr# -!rnekC C++ aklamalarnda H taneden +a"la + an ana b%l%nama"/# WW 'klamalar iin, derleme esnasnda i iletirme d!nmleri ve en % g%n k)d retimi aplabilir# Bendi iGinden kod geni2 emesi Kalpla pr)gramlama k)dlar kendiliinden geniletmede de k%llanlabilir# -!rnekC d!ng ama ve snama k)d% retme/# <rnekC derleme esnasnda mWWn nin n si bilinirse* temp ate-int n* in ine int po(er(!onst int6 m)< ret%rn po(er-n41*(m)0m/ I temp ate- * in ine int po(er-1*(!onst int6 m)< ret%rn m/ I temp ate- * in ine int po(er-7*(!onst int6 m)< ret%rn 1/ I JJJ !o%t--po(er-5*(m)--end / Uenetim "ap3 ar3 Kalp st pr)gramlarnda denetim aklar, kendini arma -kendini aran kalplar/, sei&i % g%nl%k -kalp !"ellemeleri/ ve k)%l ile&i -QC/ k%llanlarak tanmlanr# C++ da b%l%nan i+ ve s_it&h gibi seim de imleri st ilevler k%llanlarak edeerleri elde edilebilir#

Ba 3p st program aman3n sor%n ar3 Kalp st pr)gramlama !"ellikle derle i&ilerden ka naklanan )k sa da s)r%na sahiptir# $% "den b% tr pr)gramlar gelitirirken dikkatli )lmaldr# WW 3ata a klama# WW K)d%n )k%nabilirlii# WW =erleme sresi# WW =erle i&i snrlar# WW 'klama kalplarnn snrlar WW 'ktarlabilirlik#

8kin&i &ildimi" b%rada s)nlan )r# $% kitap a"ami dikkatle a"lm )l%p, g!"den kaan hatalar )lm%sa, a"ara herhangi bir s)r%ml%l%k kleneme"# Ok%r dikkatten kaan hatalar aadaki adrese bildiririrse memn%n )l%r%"# selEk)\ ah))#&)m

1. !i de SonsLz
D# &ildimi"de CBC++ nn btn temel !"ellikleri anlatlmt# $% &ildimi"de ise, ktphaneler k)n%s% !rnekler ile anlatlma a alld# 'slnda ktphanelerin her k)n%s%, a r bir kitap )la&ak kadar genitir# 'ma bi" kitab +a"la iirmemek iin basit ekilde anlattk# D# &ildimi"in !ns!"nde de belirttiimi" gibi, ED# " lda a"lmda asl k)n%* )k ekirdekli ilem&iler ve e anl pr)gramlama, d)la s ile t%taklardr -threads/# 6abii e anl pr)gramlama sade&e t%taklarla !"lebile&ek bir s)r%n deildir# $% k)n%da +arkl )rtamlar iin +arkl aklamlar b%l%nmaktadr# 6ek bir !"m )kt%r# Sanal makinalar b%n%n sihirli ila& deildir# -mNU.eava virt%al ma&hine nin k%laklar nlasn/# 8in mimari an vardr, derle i&i an vardr, iletim di"gesi an vardr, ve hepsinden !nemlisi !"le&ek s)r%n an vardr# ED# " lda a"lm&larn !nndeki en !nemli +rsat, e anl pr)gramlamadr# 9"de " verimi sala an )rtam, a"lm& arkada eni $ill 7ates apabilir# CBC++b% i iin en i i ardm&sdr# $%rada anlattm" ktphaneler den birka, e anl pr)gramlamada eniden tanmlanmak ")r%ndadr -!rnein string ler/, ama hepsi deil# $))st ktphanesi standart ktphanenin b% s)r%n%n% k)la &a !"mlemektedir# F# &ildimi"de b%nlar )k a rntl anlatla&ak# 6er&ihler ise imdilik pr)gram& a brakla&ak# :ira e anl C++ standartlar tahmini E@D@ lnda a nlana&ak# 'klm"a gelmiken akla alm* D n%maral teknik rap)r%n derle i&ilere getirdii enilikleri, kitabm"n kapsama alannn dnda braktk# :ira b%nlar % an ki derle i&ilerde b%l%nma an !"ellikleri tamaktadr# $% !"ellikler E@@d den s)nra gelitirile&ek )lan derle i&ilere eklenen !"elliklerdir# -$k" C++ 6]#D/ Umar" b% kitap si"e ararl )l%r# Selami KOLU

`?'ralk?E@@>

]^]VUSB]LS[
Standart CBC++ ktphanesi ################################# E String,ler ################################# H 7irdiler ve ktlar ################################# F@ Kalplar -6emplates/ ################################# RR Kalp Sn+lar -6emplate Classes/ ######################## DFF Standart Kalp Ktphanesi ############################### E@E 'lg)ritmalar ############################### Ed@ 8stisnalar -TZ&epti)ns/ ############################### Fdd SKK Aesne 8levler -+%n&t)rs/ ############################ G@R $itset ############################ GFG <br Ktphaneler ############################ GHE ;st Kr)gramlama -Uetapr)gramming/ ############## GH>

You might also like