std::string klasa u C++
C++ ima u svojoj definiciji način predstavljanja a niz znakova kao objekt klase . Ova klasa se zove std::string. Klasa niza pohranjuje znakove kao niz bajtova s funkcionalnošću dopuštanja pristup jednobajtnom znaku .
String vs Character Array
| Niz | Char Array |
|---|---|
| Niz je a klasa koja definira objekte koji se predstavljaju kao tok znakova. | Niz znakova je jednostavno niz znakova koji se može završiti nultim znakom. |
| U slučaju stringova memorija je dodijeljena dinamički . Više memorije može se dodijeliti tijekom izvođenja na zahtjev. Budući da memorija nije unaprijed dodijeljena ne gubi se memorija . | Veličina niza znakova mora biti statički dodijeljena više memorije ne može se dodijeliti tijekom izvođenja ako je potrebno. Neiskorišteno dodijeljeno memorija se također gubi |
| Kako su nizovi predstavljeni kao objekti nema raspada niza javlja se. | postoji prijetnja od array raspadanje u slučaju niza znakova. |
| Žice su sporije u usporedbi s implementacijom od niza znakova. | Provedba niz znakova je brži nego std:: niz. |
| String klasa definira niz funkcionalnosti koji dopuštaju višestruke operacije na nizovima. | Nizovi znakova ne nuditi mnogi ugrađene funkcije manipulirati žicama. |
Operacije na nizovima
1) Ulazne funkcije
| Funkcija | Definicija |
|---|---|
| getline() | Ova se funkcija koristi za pohranjivanje toka znakova koje je korisnik unio u memoriju objekta. |
| push_back() | Ova se funkcija koristi za unos znaka na kraju niza. |
| pop_back() | Uvedena iz C++11 (za nizove) ova se funkcija koristi za brisanje posljednjeg znaka iz niza. |
Primjer:
CPP // C++ Program to demonstrate the working of // getline() push_back() and pop_back() #include #include // for string class using namespace std ; // Driver Code int main () { // Declaring string string str ; // Taking string input using getline() getline ( cin str ); // Displaying string cout < < 'The initial string is : ' ; cout < < str < < endl ; // Inserting a character str . push_back ( 's' ); // Displaying string cout < < 'The string after push_back operation is : ' ; cout < < str < < endl ; // Deleting a character str . pop_back (); // Displaying string cout < < 'The string after pop_back operation is : ' ; cout < < str < < endl ; return 0 ; }
Izlaz
The initial string is : The string after push_back operation is : s The string after pop_back operation is :
Vremenska složenost: O(1)
Složenost prostora: O(n) gdje je n veličina niza
2) Funkcije kapaciteta
| Funkcija | Definicija |
|---|---|
| kapacitet() | Ova funkcija vraća kapacitet dodijeljen nizu koji može biti jednak ili veći od veličine niza. Dodatni prostor se dodjeljuje tako da kada se novi znakovi dodaju u niz, operacije mogu biti izvedene učinkovito. |
| promijeni veličinu() | Ova funkcija mijenja veličinu niza, veličina se može povećati ili smanjiti. |
| duljina () | Ova funkcija pronalazi duljinu niza. |
| skupi_da_stane() | Ova funkcija smanjuje kapacitet niza i čini ga jednakim minimalnom kapacitetu niza. Ova je operacija korisna za uštedu dodatne memorije ako smo sigurni da ne treba dodatno dodavati znakove. |
Primjer:
CPP // C++ Program to demonstrate the working of // capacity() resize() and shrink_to_fit() #include #include // for string class using namespace std ; // Driver Code int main () { // Initializing string string str = 'geeksforgeeks is for geeks' ; // Displaying string cout < < 'The initial string is : ' ; cout < < str < < endl ; // Resizing string using resize() str . resize ( 13 ); // Displaying string cout < < 'The string after resize operation is : ' ; cout < < str < < endl ; // Displaying capacity of string cout < < 'The capacity of string is : ' ; cout < < str . capacity () < < endl ; // Displaying length of the string cout < < 'The length of the string is :' < < str . length () < < endl ; // Decreasing the capacity of string // using shrink_to_fit() str . shrink_to_fit (); // Displaying string cout < < 'The new capacity after shrinking is : ' ; cout < < str . capacity () < < endl ; return 0 ; }
Izlaz
The initial string is : geeksforgeeks is for geeks The string after resize operation is : geeksforgeeks The capacity of string is : 26 The length of the string is :13 The new capacity after shrinking is : 13
Vremenska složenost: O(1)
Složenost prostora: O(n) gdje je n veličina niza
3) Funkcije iteratora
| Funkcija | Definicija |
|---|---|
| početi() | Ova funkcija vraća iterator na početak niza. |
| kraj() | Ova funkcija vraća iterator na sljedeći kraj niza. |
| rbegin() | Ova funkcija vraća obrnuti iterator koji pokazuje na kraj niza. |
| render() | Ova funkcija vraća obrnuti iterator koji pokazuje na prethodni početak niza. |
| cbegin() | Ova funkcija vraća konstantni iterator koji pokazuje na početak niza koji se ne može koristiti za izmjenu sadržaja na koji pokazuje. |
| nekoliko() | Ova funkcija vraća konstantni iterator koji pokazuje na sljedeći kraj niza i ne može se koristiti za izmjenu sadržaja na koji pokazuje. |
| crbegin() | Ova funkcija vraća konstantni obrnuti iterator koji pokazuje na kraj niza koji se ne može koristiti za izmjenu sadržaja na koji pokazuje. |
| crend() | Ova funkcija vraća konstantni obrnuti iterator koji pokazuje na prethodni početak niza i ne može se koristiti za izmjenu sadržaja na koji pokazuje. |
Algoritam:
- Deklarirajte niz
- Pokušajte iterirati niz koristeći sve vrste iteratora
- Pokušajte modificirati element niza.
- Prikaz svih ponavljanja.
Primjer:
CPP // C++ Program to demonstrate the working of // begin() end() rbegin() rend() cbegin() cend() crbegin() crend() #include #include // for string class using namespace std ; // Driver Code int main () { // Initializing string` string str = 'geeksforgeeks' ; // Declaring iterator std :: string :: iterator it ; // Declaring reverse iterator std :: string :: reverse_iterator it1 ; cout < < 'Str:' < < str < < ' n ' ; // Displaying string cout < < 'The string using forward iterators is : ' ; for ( it = str . begin (); it != str . end (); it ++ ){ if ( it == str . begin ()) * it = 'G' ; cout < < * it ; } cout < < endl ; str = 'geeksforgeeks' ; // Displaying reverse string cout < < 'The reverse string using reverse iterators is ' ': ' ; for ( it1 = str . rbegin (); it1 != str . rend (); it1 ++ ){ if ( it1 == str . rbegin ()) * it1 = 'S' ; cout < < * it1 ; } cout < < endl ; str = 'geeksforgeeks' ; //Displaying String cout < < 'The string using constant forward iterator is :' ; for ( auto it2 = str . cbegin (); it2 != str . cend (); it2 ++ ){ //if(it2 == str.cbegin()) *it2='G'; //here modification is NOT Possible //error: assignment of read-only location //As it is a pointer to the const content but we can inc/dec-rement the iterator cout < <* it2 ; } cout < < ' n ' ; str = 'geeksforgeeks' ; //Displaying String in reverse cout < < 'The reverse string using constant reverse iterator is :' ; for ( auto it3 = str . crbegin (); it3 != str . crend (); it3 ++ ){ //if(it2 == str.cbegin()) *it2='S'; //here modification is NOT Possible //error: assignment of read-only location //As it is a pointer to the const content but we can inc/dec-rement the iterator cout < <* it3 ; } cout < < ' n ' ; return 0 ; } //Code modified by Balakrishnan R (rbkraj000)
Izlaz
Str:geeksforgeeks The string using forward iterators is : Geeksforgeeks The reverse string using reverse iterators is : Skeegrofskeeg The string using constant forward iterator is :geeksforgeeks The reverse string using constant reverse iterator is :skeegrofskeeg
Vremenska složenost: O(1)
Složenost prostora: O(n) gdje je n veličina niza
4) Manipulacijske funkcije:
| Funkcija | Definicija |
|---|---|
| kopija ('char array' len pos) | Ova funkcija kopira podniz u ciljnom nizu znakova spomenutom u svojim argumentima. Potrebna su 3 argumenta ciljna duljina niza znakova za kopiranje i početna pozicija u nizu za početak kopiranja. |
| zamijeniti () | Ova funkcija zamjenjuje jedan niz drugim |
Primjer:
CPP // C++ Program to demonstrate the working of // copy() and swap() #include #include // for string class using namespace std ; // Driver Code int main () { // Initializing 1st string string str1 = 'geeksforgeeks is for geeks' ; // Declaring 2nd string string str2 = 'geeksforgeeks rocks' ; // Declaring character array char ch [ 80 ]; // using copy() to copy elements into char array // copies 'geeksforgeeks' str1 . copy ( ch 13 0 ); // Displaying char array cout < < 'The new copied character array is : ' ; cout < < ch < < endl ; // Displaying strings before swapping cout < < 'The 1st string before swapping is : ' ; cout < < str1 < < endl ; cout < < 'The 2nd string before swapping is : ' ; cout < < str2 < < endl ; // using swap() to swap string content str1 . swap ( str2 ); // Displaying strings after swapping cout < < 'The 1st string after swapping is : ' ; cout < < str1 < < endl ; cout < < 'The 2nd string after swapping is : ' ; cout < < str2 < < endl ; return 0 ; }
Izlaz
The new copied character array is : geeksforgeeks The 1st string before swapping is : geeksforgeeks is for geeks The 2nd string before swapping is : geeksforgeeks rocks The 1st string after swapping is : geeksforgeeks rocks The 2nd string after swapping is : geeksforgeeks is for geeks
Obavezno pročitati: C++ String klasa i njezine primjene