Funkcia append
S funkciou append môžme doslova skladať reťazce a nielen to. Má podobné deklarácie ako konštruktor, ktorý sme si vysvetlili v minulom článku. Funkcia pridáva ďalšie znaky podľa našej implementácie na koniec daného reťazca. Poďme sa pozrieť na program.
1. program: Využitie funkcie append
#include <iostream> // hlavickové súbory
#include <string>
using namespace std; // priestor mien
int main() // hlavna funkcia main
{
string retazec1 = "Som z rodu Homo ";
string retazec2 = retazec1.append("sapiens sapiens!"); // 1. sposob
cout << retazec2 << "\n";
string retazec3;
string retazec4 = "Mal som dejavu, ako keby som ju uz niekedy videl.";
retazec3.append(retazec4); // 2. sposob
cout << retazec3 <<"\n";
string retazec5;
string retazec6 = "Pozri sa na severnu stranu oblohy, vidis tu nehybnu hviezdu? Tak to je Polarka!";
retazec5.append(retazec6, retazec6.size()-8,7); // 3. sposob
cout << retazec5 << "\n";
string retazec7;
retazec7.append("Moj milasik, budes len moj!", 11); // 4. sposob
cout << retazec7 << "\n";
string retazec8;
cout << "S" <<retazec8.append(7, 's') << ", pocul si to? Snad nemame v dome hada!" << "\n"; // 5. sposob
string retazec9 = "Kdesi v tvojich slov som sa stratil, asi navzdy :(";
string retazec10;
retazec10.append(retazec9.end()-2, retazec9.end()); // 6. sposob
cout << retazec10 << "\n";
string retazec11;
cout << "Kupte si nieco z autobazaru " << retazec11.append<int>(3, 0x41) << " AUTO!"; // 7. sposob
return 0; // koniec programu
}
Výsledok programu:
Som z rodu Homo sapiens sapiens! Mal som dejavu, ako keby som ju uz niekedy videl. Polarka Moj milasik Ssssssss, pocul si to? Snad nemame v dome hada! :( Kupte si nieco z autobazaru AAA AUTO!
Rozbor programu:
Teraz si poďme zhrnúť jednotlivé použitia funkcie append.
1.spôsob: mal by byť jasný
2.spôsob: mal by byť jasný
3.spôsob: druhý argument predstavuje prvú pozíciu v reťazci, od ktorej funkcia append začne kopírovať do prázdneho reťazca a tretí argument znamená počet znakov od prvej pozície v reťazci, ktoré sa skopírujú do nového reťazca
4.spôsob: druhý argument znamená počet znakov od nultej pozícii, ktoré sa majú skopírovať do nového reťazca
5.spôsob: prvý argument je počet znakov a druhý argument samotný znak, ktorý má byť v reťazci
6.spôsob: prvý argument predstavuje začiatočnú pozíciu v reťazci, druhý konečnú
7.spôsob: tu definujeme zoznam, prvý argument je počet znakov, ktoré sa majú do reťazca pridať a druhý argument znak v ASCII kóde, ale v hexadecimálnej podobe
Funkcia capacity
Ako ste si už všimli, keď robíme s objektom string z rovnakomennej knižnice, absolútne nás netrápi veľkosť poľa. Nemusíme sa starať, či sme počas behu programu prekročili náš definovaný limit pre reťazec. V jazyku C sa s tým človek veľmi natrápi. Našťastie v jazyku C++ nám tieto problémy odpadajú.
Ale ako to v skutočností funguje? Ono totižto vždy, keď objekt string začne byť hladný po pamäti, tak ju dostane. Keďže veľkosť reťazca je viazaný na integrálny typ size_t, tak maximálnu pridelenú veľkosť, ktorú môže dostať objekt string, je maximálna hodnota integrálneho typu size_t.
Takže už chápeme, ako dostáva objekt string veľkosť a ak chceme zistiť aktuálne pridelenú pamäť pre objekt string, tak využijeme funkciu capacity.
2. program:
#include <iostream> // hlavickové súbory #include <string> using namespace std; // priestor mien int main() // hlavna funkcia main { string retazec1 = "Misia na Jupiter sa nepodarila, ale nadeje nekoncia, k Jupiteru sa este dostaneme!"; string retazec2 = "Odkedy som sa prestahoval do New Yorku, cnie sa mi za domovom :("; string retazec3 = "Rozum kaze, vykasli sa na nu ale s citmi bojovat je nemozne!"; cout << "1.retazec: velkost - "<<retazec1.size()<<" kapacita - "<<retazec1.capacity()<<"\n"; cout << "2.retazec: velkost - "<<retazec2.size()<<" kapacita - "<<retazec2.capacity()<<"\n"; cout << "3.retazec: velkost - "<<retazec3.size()<<" kapacita - "<<retazec3.capacity()<<"\n"; return 0; // koniec programu }
Výsledok programu:
1.retazec: velkost - 82 kapacita - 82 2.retazec: velkost - 64 kapacita - 64 3.retazec: velkost - 60 kapacita - 60
Rozbor programu: Mali sme šťastie (resp. ja), alokovaná pamäť bola rovnaká ako veľkosť reťazca, čo je logické. Ale nespoliehajte sa, že to vždy tak bude a preto nepoužívajte funkciu capacity ako náhradu funkcie size!