Vymazanie reťazca s funkciou clear
Môže sa vám naskytnuť situácia, že potrebujete vymazať celý reťazec. Na tento úkon je ako stvorená funkcia clear. Funkcia clear vráti reťazec s dĺžkou 0. Avšak aj s funkciou erase viete vymazať reťazec. Ukážeme si oba možností.
1. program: Vymázanie celého reťazca s funkciou erase
#include <iostream> #include <string> using namespace std; int main() { string retazec = "Odnes uz vazne zacnem cvicit!"; cout << retazec << "\n"; retazec.erase(retazec.begin(), retazec.end()); if (retazec.empty()) cout << "Retazec je prazdny!" << "\n"; retazec = "Ahojky moj priatelu!"; cout << retazec << "\n"; return 0; }
Výsledok programu:
Odnes uz vazne zacnem cvicit! Retazec je prazdny! Ahojky moj priatelu!
Vidíte ako jednoducho vymážeme reťazec. Teraz použijme funkciu clear.
2. program: Vymázanie celého reťazca s funkciou clear
#include <iostream> #include <string> using namespace std; int main() { string retazec = "Niekde medzi nebom a zemou sa odohravaju nase zivoty."; cout << retazec << "\n"; retazec.clear(); if (retazec.empty()) cout << "Retazec je prazdny!" << "\n"; retazec = "Videl som perfektny horror o indianskom pohrebisti. Docela mrazive!"; cout << retazec << "\n"; return 0; }
Výsledok programu:
Niekde medzi nebom a zemou sa odohravaju nase zivoty. Retazec je prazdny! Videl som perfektny horror o indianskom pohrebisti. Docela mrazive!
Zaujímavosťou je, že funkcia clear neovplyvňuje pridelenú pamäť pre reťazec. Ak raz zmažeme reťazec, pridelená pamäť by mala ostať nedotknutá. Čo môže byť niekedy problém, pretože si predstavme zložitý systém s tisickami reťazcov, ktoré vznikajú a zanikajú a ak nebudeme uvoľnovať pamäť, tak aplikácia skôr či neskôr zahltí celú operačnú pamäť. Riešením je potom napr. funkcia shrink_to_fit.
3. príklad: Ukážka vzťahu medzi funkciou clear a pridelenou pamäťou
#include <iostream> #include <string> using namespace std; int main() { string retazec = "Kedy sa vydame na Mars?"; cout << retazec << "\n" << "Kapacita pridelenej pamäte: " << retazec.capacity() << "\n\n"; retazec.clear(); if (retazec.empty()) cout << "Retazec je prazdny!" << "\n" << "Kapacita pridelenej pamäte: " << retazec.capacity() << "\n\n"; retazec.shrink_to_fit(); if (retazec.empty()) cout << "Retazec je prazny!" << "\n" << "Kapacita pridelenej pamäte po uprave: " << retazec.capacity() << "\n\n"; retazec = "Mam ta rad kocicko!"; cout << retazec << "\n" << "Kapacita pridelenej pamäte: " << retazec.capacity() << "\n\n"; return 0; }
Výsledok programu:
Kedy sa vydame na Mars? Kapacita pridelenej pamäte: 23 Retazec je prazdny! Kapacita pridelenej pamäte: 23 Retazec je prazny! Kapacita pridelenej pamäte po uprave: 0 Mam ta rad kocicko! Kapacita pridelenej pamäte: 19
Funkcia swap
Rýchlo potrebujete vzájomne vymeniť obsah medzi dvoma reťazcami? Na tento účel vám poslúži funkcia swap z knižnice string.
4. príklad: Testujeme funkciu swap
#include <iostream> #include <string> using namespace std; int main() { string retazec1 = "macicky"; string retazec2 = "kocurikov"; retazec1.swap(retazec2); cout << "U babicky mam 2 " << retazec1 << " a 3 " << retazec2; return 0; }
Výsledok programu:
U babicky mam 2 kocurikov a 3 macicky
5. príklad: Ďalší príklad na funkciu swap
#include <iostream> #include <string> using namespace std; int main() { int cislo = 21; cout << "Cislo " << cislo << " je delitelne "; string retazec; string retazec1 = "jednickou"; string retazec2 = "trojkou"; string retazec3 = "sedmickou"; if (cislo % 1 == 0) { retazec.swap(retazec1); cout << retazec << ", "; } if (cislo % 3 == 0) { retazec.swap(retazec2); cout << retazec << " a "; } if (cislo % 7 == 0) { retazec.swap(retazec3); cout << retazec << ".\n"; } return 0; }
Výsledok programu:
Cislo 21 je delitelne jednickou, trojkou a sedmickou.