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 append a capacity

POINT.X

Programovanie v jazyku C++: Knižnica string – funkcie append a capacity

C++

V článku sa pozrieme na funkciu append, s ktorou môžeme konštruovať reťazce ako chceme a funkciu capacity, ktorá nám ukáže aktuálne alokovanú veľkosť pamäte pre reťazec. 


reklama

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!

Nahoru

(Jako ve škole)
Průměr: 1,00 | Hodnotilo: 2
 

Top články z OpenOffice.cz

Příspěvky

Programovanie v jazyku C++: Knižnica string – funkcie append a capacity
Tomas 23. 09. 2017, 20:15:42
Odpovědět  Odkaz 
A v akom pripade moze mat size() inu hodnotu ako capacity()?
Eduard Boldižár Re: Programovanie v jazyku C++: Knižnica string – funkcie append a capacity
Eduard Boldižár 24. 09. 2017, 15:53:15
Odpovědět  Odkaz 
To je dobrá otázka, odpoveď vie len samotný systém, ktorý prideľuje pamäť pre reťazec
Re: Re: Programovanie v jazyku C++: Knižnica string – funkcie append a capacity
Tomas 24. 09. 2017, 19:16:54
Odpovědět  Odkaz 
Nebude to tak, ze capacity() vracia maximalnu vyalokovanu velkost retazca vlozeneho do string a size() jeho aktualnu velkost v string?
napr.:

string text;

text.assign("jeden");
// capacity() aj size() vratia 5
text.assign("dva");
// capacity() 5 a size() 3

Přidat názor

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



 
 

Eduard Boldižár

Eduard Boldižár

Som redaktorom stránky Exospace.cz. Mám 23 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
  • Hodnocení autora: *


Redakční blog

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


Pavel Fric

Pavel Fric, 29. listopad

Palapeli


Všechny blogy »