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:

  1. Paskelbkite eilutę
  2. Pabandykite pakartoti eilutę naudodami visų tipų iteratorius
  3. Pabandykite pakeisti eilutės elementą.
  4. 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