C++ ima v svoji definiciji način za predstavitev a zaporedje znakov kot objekt razreda . Ta razred se imenuje std::string. Razred niza shrani znake kot zaporedje bajtov s funkcijo dopuščanja dostop do enobajtnega znaka .
Niz proti nizu znakov
Niz | Char Array |
|---|---|
| Niz je a razred, ki definira objekte ki so predstavljeni kot tok znakov. | Niz znakov je preprosto nabor znakov ki se lahko zaključi z ničelnim znakom. |
| V primeru nizov je pomnilnik dodeljuje dinamično . Na zahtevo je med izvajanjem mogoče dodeliti več pomnilnika. Ker noben pomnilnik ni vnaprej dodeljen noben spomin ni izgubljen . | Velikost niza znakov mora biti statično dodeljena več pomnilnika ni mogoče dodeliti med izvajanjem, če je to potrebno. Neuporabljeno dodeljeno pomnilnik je tudi izgubljen |
| Ker so nizi predstavljeni kot predmeti brez razpada niza pojavi. | Obstaja a grožnja z razpad niza v primeru niza znakov. |
| Strune so počasnejše v primerjavi z izvedbo kot niz znakov. | Izvedba niz znakov je hitrejši kot std:: niz. |
| Razred niza definira številne funkcionalnosti ki omogočajo mnogotere operacije na nizih. | Nizi znakov ne ponujajo veliko vgrajene funkcije za manipulacijo nizov. |
Operacije na nizih
1) Vhodne funkcije
| funkcija | Opredelitev |
|---|---|
| getline() | Ta funkcija se uporablja za shranjevanje toka znakov, kot jih vnese uporabnik v pomnilnik objekta. |
| push_back() | Ta funkcija se uporablja za vnos znaka na koncu niza. |
| pop_back() | Ta funkcija, uvedena iz C++11 (za nize), se uporablja za brisanje zadnjega znaka iz niza. |
primer:
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; }
Izhod
The initial string is : The string after push_back operation is : s The string after pop_back operation is :
Časovna zahtevnost: O(1)
Kompleksnost prostora: O(n) kjer je n velikost niza
2) Zmogljivostne funkcije
| funkcija | Opredelitev |
|---|---|
| zmogljivost() | Ta funkcija vrne zmogljivost, dodeljeno nizu, ki je lahko enaka ali večja od velikosti niza. Dodaten prostor je dodeljen tako, da se lahko operacije izvajajo učinkovito, ko se v niz dodajo novi znaki. |
| spremeni velikost () | Ta funkcija spremeni velikost niza, velikost lahko povečate ali zmanjšate. |
| dolžina() | Ta funkcija poišče dolžino niza. |
| shrink_to_fit() | Ta funkcija zmanjša kapaciteto niza in jo izenači z minimalno zmogljivostjo niza. Ta operacija je uporabna za prihranek dodatnega pomnilnika, če smo prepričani, da ni treba več dodajati znakov. |
primer:
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; }
Izhod
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
Časovna zahtevnost: O(1)
Kompleksnost prostora: O(n) kjer je n velikost niza
3) Funkcije iteratorja
| funkcija | Opredelitev |
|---|---|
| začeti () | Ta funkcija vrne iterator na začetek niza. |
| konec () | Ta funkcija vrne iterator na naslednji konec niza. |
| rbegin() | Ta funkcija vrne povratni iterator, ki kaže na konec niza. |
| render() | Ta funkcija vrne povratni iterator, ki kaže na prejšnji ali začetek niza. |
| cbegin() | Ta funkcija vrne stalni iterator, ki kaže na začetek niza, ki ga ni mogoče uporabiti za spreminjanje vsebine, na katero kaže. |
| nekaj () | Ta funkcija vrne stalni iterator, ki kaže na naslednji konec niza, ki ga ni mogoče uporabiti za spreminjanje vsebine, na katero kaže. |
| crbegin() | Ta funkcija vrne stalni povratni iterator, ki kaže na konec niza, ki ga ni mogoče uporabiti za spreminjanje vsebine, na katero kaže. |
| crend() | Ta funkcija vrne stalni povratni iterator, ki kaže na prejšnji ali začetek niza, ki ga ni mogoče uporabiti za spreminjanje vsebine, na katero kaže. |
Algoritem:
- Deklarirajte niz
- Poskusite ponoviti niz z uporabo vseh vrst iteratorjev
- Poskusite spremeniti element niza.
- Prikažite vse ponovitve.
primer:
niz struktur v jeziku cCPP
// 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)
Izhod
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
Časovna zahtevnost: O(1)
Kompleksnost prostora: O(n) kjer je n velikost niza
4) Manipulacijske funkcije:
| funkcija | Opredelitev |
|---|---|
| copy('char array' len pos) | Ta funkcija kopira podniz v ciljnem nizu znakov, omenjenem v njenih argumentih. Za kopiranje so potrebni 3 argumenti dolžina ciljne matrike znakov in začetni položaj v nizu za začetek kopiranja. |
| zamenjaj() | Ta funkcija zamenja en niz z drugim |
primer:
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; }
Izhod
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
Obvezno prebrati: Razred nizov C++ in njegove aplikacije