přejít na obsah přejít na navigaci

Linux E X P R E S, Programovanie v jazyku C++: Knižnica string – funkcie resize, reserve a shrink_to_fit

Alvao

Programovanie v jazyku C++: Knižnica string – funkcie resize, reserve a shrink_to_fit

C++

V tomto diele si rozoberieme funkcie resize , reserve a shrink_to_fit . Umožnia nám napr. meniť veľkosť reťazca či ovplyvňovať kapacitu pridelenej pamäte pre reťazec. 


reklama

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



Nahoru

Přidat téma diskuse

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Top články z OpenOffice.cz

Eduard Boldižár

Eduard Boldižár

Som redaktorom stránky Exospace.cz. Mám 24 rokov. Čas trávim v IT škole. Medzi moje záľuby patrí astronómia, sci-fi literatúra a programovanie.


  • Distribuce: ubuntu
  • Grafické prostředí: unity


CeBIT 2018

Redakční blog

Redakce

Redakce, 21. prosinec

Pište pro LinuxEXPRES

Baví vás Linux? Pište o něm, není to nic těžkého. LinuxEXPRES hledá nové autory.


Pavel Fric

Pavel Fric, 23. říjen

Nové motivy pro přehrávač Sayonara

Pomozte rozšířit možnost měnit vzhled programu za běhu


Pavel Fric

Pavel Fric, 28. únor

Lollypop


Všechny blogy »

Geotronics - Bezpilotně