Funkcia resize
Funkcia resize nám umožní zmeniť veľkosť reťazca. Ako nato, ukážeme si v príklade.
1. príklad: Aplikácia funkcie resize
#include <iostream> // hlavičkove subory #include <string> using namespace std; // priestor mien int main() { string retazec1 = "Milujem hru Cities Skylines ;). Skus ju tiez"; size_t i = retazec1.size(); retazec1.resize(i+3, '!'); // prvy sposob cout << retazec1 << "\n"; string retazec2 = "Amalka, laska mojho zivota, dnes neprisla na rande, chyba mi :("; size_t j = retazec2.size(); retazec2.resize(j-37); // druhy sposob cout << retazec2; return 0; // koniec programu }
Výsledok programu:
Milujem hru Cities Skylines ;). Skus ju tiez!!! Amalka, laska mojho zivota
Rozbor programu:
1. spôsob: V prvom spôsobe chceme zväčšiť veľkosť reťazca. Ideálne ho aj naplniť nejakými znakmi. Preto prvý argument funkcie resize vyjadruje novú veľkosť reťazca a musí byť väčšia ako aktuálna hodnota veľkostí reťazca a druhým argumentom naplníme znakmi nové prázdne prvky.
2. spôsob: Ak chceme zmenšiť veľkosť reťazca, tak nám stačí napísať novú veľkosť reťazca v jedinom argumente.
Funkcia reserve
O pridelej pamäti sme sa už rozprávali pri vysvetľovaní funkcie capacity v tomto článku. Existuje funkcia, s ktorou môžme manipulovať s veľkosťou prideľovanej pamäte. Keďže objekt string si sam automatický manažuje pridelovanú pamäť, funkcia reserve je viacmenej kozmetickou funkciu. Avšak môže si nájsť uplatnenie a preto si ju i spomíname. Poďme si ukázať príklad.
2. príklad: Testujeme funkciu reserve
#include <iostream> // hlavičkove subory #include <string> using namespace std; // priestor mien int main() { string retazec = "Svet je jedna velka zlozita skladacka!"; cout << "Prvy test: " << "velkost - "<<retazec.size()<<" kapacita - "<<retazec.capacity(); retazec.reserve(38); cout << "\nDruhy test: " << "velkost - "<<retazec.size()<<" kapacita - "<<retazec.capacity(); retazec.reserve(39); cout << "\nTreti test: " << "velkost - "<<retazec.size()<<" kapacita - "<<retazec.capacity(); return 0; // koniec programu }
Výsledok programu:
Prvy test: velkost - 38 kapacita - 38 Druhy test: velkost - 38 kapacita - 38 Treti test: velkost - 38 kapacita – 76
Rozbor programu:
Už asi tušíte, ako pracuje funkcia reserve. Ak je argument rovný alebo menší ako veľkosť reťazca, tak sa nič neudeje. Ak väčší, tak až vtedy dôjde k zväčšeniu kapacity pridelenej pamäte.
Funkcia shrink_to_fit
Teraz poďme na to opačne ako pri funkcii reserve. Povedali sme si z akehokoľvek dôvodu, že máme vysokú kapacitu pridelenej pamäte a chceme, aby kapacita pridelenej pamäte bola rovná aktuálnej veľkostí reťazca. Vtedy využíjeme funkciu shrink_to_fit. Nie je však striktné prikázané, že kapacita musí byť rovná veľkostí reťazca, preto by malo dôjsť k zmenšeniu kapacity ale nemusí byť rovnaká ako veľkosť reťazca. Samozrejme o príklad nebudete ukradnutý.
Ešte poznámka, funkcia shrink_to_fit je podporovaná až vo verzii c++11 a vyššie. Ak kompilujete v termináli, tak príkaz na kompiláciu môže vyzerať takto:
g++ -std=c++11 menoSuboru.cpp -o menoSuboru
3. príklad: Testujeme funkciu shrink_to_fit
#include <iostream> // hlavičkove subory #include <string> using namespace std; // priestor mien int main() { string retazec = "Mozart a jeho rajsku hudbu milujem!"; cout << "Prvy test: " << "velkost - "<<retazec.size()<<" kapacita - "<<retazec.capacity(); retazec.resize(6); cout << "\nDruhy test: " << "velkost - "<<retazec.size()<<" kapacita - "<<retazec.capacity(); retazec.shrink_to_fit(); cout << "\nTreti test: " << "velkost - "<<retazec.size()<<" kapacita - "<<retazec.capacity(); return 0; // koniec programu }
Výsledok programu:
Prvy test: velkost - 35 kapacita - 35 Druhy test: velkost - 6 kapacita - 35 Treti test: velkost - 6 kapacita – 6