std::styginių klasė C++
C++ apibrėžime yra būdas pavaizduoti a simbolių seka kaip klasės objektas . Ši klasė vadinama std:: string. Eilučių klasė saugo simbolius kaip baitų seką su leidimo funkcija prieiga prie vieno baito simbolio .
Eilutė vs simbolių masyvas
| Styga | Char Array |
|---|---|
| Styga yra a klasė, kuri apibrėžia objektus kurie turi būti vaizduojami kaip simbolių srautas. | Simbolių masyvas yra tiesiog an simbolių masyvas kurį galima užbaigti nuliniu simboliu. |
| Stygų atveju atmintis yra paskirstoma dinamiškai . Veiklos metu pagal poreikį galima skirti daugiau atminties. Kadangi atmintis iš anksto nepaskirstyta atmintis nėra švaistoma . | Simbolių masyvo dydis turi būti paskirstytas statiškai Jei reikia, vykdymo metu daugiau atminties negalima skirti. Nepanaudota paskirta atmintis taip pat eikvojama |
| Kaip eilutės vaizduojamos kaip objektai jokio masyvo irimo atsiranda. | Yra a grėsmė masyvo irimas simbolių masyvo atveju. |
| Stygos yra lėtesnės lyginant su įgyvendinimu nei simbolių masyvas. | Įgyvendinimas simbolių masyvas yra greitesnis nei std:: eilutė. |
| Stygų klasė apibrėžia daug funkcijų kurios leidžia atlikti kolektoriaus operacijas su stygomis. | Simbolių masyvai nesiūlyti daug integruotos funkcijos manipuliuoti stygomis. |
Operacijos su stygomis
1) Įvesties funkcijos
| Funkcija | Apibrėžimas |
|---|---|
| getline () | Ši funkcija naudojama vartotojo įvestam simbolių srautui saugoti objekto atmintyje. |
| push_back() | Ši funkcija naudojama simboliui įvesti eilutės pabaigoje. |
| pop_back() | Įvesta iš C++11 (eilutėse), ši funkcija naudojama paskutiniam simboliui iš eilutės ištrinti. |
Pavyzdys:
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 ; }
Išvestis
The initial string is : The string after push_back operation is : s The string after pop_back operation is :
Laiko sudėtingumas: O(1)
Erdvės sudėtingumas: O(n) kur n yra eilutės dydis
2) Talpos funkcijos
| Funkcija | Apibrėžimas |
|---|---|
| talpa () | Ši funkcija grąžina eilutei skirtą talpą, kuri gali būti lygi arba didesnė už eilutės dydį. Papildoma vieta yra skirta tam, kad į eilutę įtraukus naujus simbolius, operacijas būtų galima atlikti efektyviai. |
| pakeisti dydį () | Ši funkcija keičia eilutės dydį, dydį galima padidinti arba sumažinti. |
| ilgis () | Ši funkcija nustato eilutės ilgį. |
| shrink_to_fit() | Ši funkcija sumažina eilutės talpą ir padaro ją lygią minimaliai eilutės talpai. Ši operacija naudinga norint sutaupyti papildomos atminties, jei esame tikri, kad daugiau simbolių nereikia pridėti. |
Pavyzdys:
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 ; }
Išvestis
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
Laiko sudėtingumas: O(1)
Erdvės sudėtingumas: O(n) kur n yra eilutės dydis
3) Iteratoriaus funkcijos
| Funkcija | Apibrėžimas |
|---|---|
| pradėti () | Ši funkcija grąžina iteratorių į eilutės pradžią. |
| pabaiga () | Ši funkcija grąžina iteratorių į kitą eilutės pabaigą. |
| rbegin () | Ši funkcija grąžina atvirkštinį iteratorių, nukreiptą į eilutės pabaigą. |
| pateikti () | Ši funkcija grąžina atvirkštinį iteratorių, nukreipiantį į ankstesnę eilutės pradžią. |
| cbegin() | Ši funkcija grąžina nuolatinį iteratorių, nurodantį į eilutės pradžią, kurio negalima naudoti norint keisti turinį, į kurį ji nukreipia. |
| keli () | Ši funkcija grąžina nuolatinį iteratorių, nukreipiantį į kitą eilutės pabaigą, ji negali būti naudojama keisti turinį, į kurį ji nukreipia. |
| crbegin () | Ši funkcija grąžina nuolatinį atvirkštinį iteratorių, nukreipiantį į eilutės pabaigą, ji negali būti naudojama keisti turinį, į kurį ji nukreipia. |
| crend () | Ši funkcija grąžina nuolatinį atvirkštinį iteratorių, nukreipiantį į ankstesnę eilutės pradžią, ji negali būti naudojama keisti turinį, į kurį ji nukreipia. |
Algoritmas:
- Paskelbkite eilutę
- Pabandykite pakartoti eilutę naudodami visų tipų iteratorius
- Pabandykite pakeisti eilutės elementą.
- Rodyti visas iteracijas.
Pavyzdys:
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)
Išvestis
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
Laiko sudėtingumas: O(1)
Erdvės sudėtingumas: O(n) kur n yra eilutės dydis
4) Manipuliavimo funkcijomis:
| Funkcija | Apibrėžimas |
|---|---|
| kopija ('char array' len poz) | Ši funkcija nukopijuoja jos argumentuose paminėtą eilutę tiksliniame simbolių masyve. Norint pradėti kopijuoti, reikia 3 argumentų tikslinio simbolio masyvo ilgio ir pradinės pozicijos eilutėje. |
| apsikeitimas () | Ši funkcija pakeičia vieną eilutę kita |
Pavyzdys:
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 ; }
Išvestis
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
Būtina perskaityti: C++ stygų klasė ir jos programos