C++ string支援疊代器方法詳解

2020-07-16 10:04:38
理解疊代器是理解 STL 的關鍵所在。模板使得演算法獨立於儲存的資料型別,而迭代器使得演算法獨立於使用的容器型別。

STL 定義了 5 種疊代器,根據所需的疊代器型別對演算法進行描述。這 5 種疊代器分別是:輸入疊代器輸出疊代器正向疊代器雙向疊代器隨機存取疊代器。對於這 5 種疊代器不僅可以執行解除參照操作(* 操作符),還可進行比較。本節主要講述 basic_string(或 string 類)中迭代器的使用。

basic.string 和 string 類均提供了常規的疊代器和反向疊代器。string 是字元的有序群集。

C++ 標準庫為 string 提供了相應介面,便於將字串作為 STL 容器使用。可以使用疊代器遍歷 string 內的所有字元;也可以使用其他演算法遍歷 string 內的所有字元。而且能夠存取字串中的每個字元,並對這些字元進行排序、逆向重排、找出最大值等操作。

string 類的疊代器是隨機存取疊代器,即支援隨機存取。任何一個 STL 演算法都可與其搭配使用。通常 string 的“疊代器型別”由 string class 本身定義,通常可以被簡單地定義為一般指標。對疊代器而言,如果發生重新分配,或其所指的值發生某些變化時,疊代器會失效。

string 類中和使用疊代器相關的成員函數是很多的,主要包括 begin()、end()、rbegin ()、rend()、append()、assign()、insert()、erase()、replace() 等。

下面通過一個列子說明迭代器在 string 類中的使用方法。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main ()
{
    string s ("The zip code of Hondelage in Germany is 38108.");
    cout << "Original: " << s << endl;
    string sd(s.begin(),s.end ()); //建構函式中使用疊代器
    cout << "Destination: " << sd << endl;
    transform (sd.begin(), sd.end(), sd.begin(), toupper); //演算法中使用疊代器(仿函數)
    cout << "Destination (All Toupper)): " << sd << endl;
    string sd1;
    sd1.append (sd.begin(),(sd.end() -7)); //append()函數中使用疊代器
    cout << "Destination sd1: " << sd1 << endl;
    string sd2;
    string::reverse_iterator iterA;
    string temp = "0";
    for (iterA = sd.rbegin (); iterA != sd.rend (); iterA++) //reverse_iterator
    {
        temp=* iterA;
        sd2.append (temp);
    }
    cout << "Destination sd2: " << sd2 << endl;
    sd2.erase (0, 15); //erase()函數中使用疊代器
    cout << "Destination sd2 (Erased 15 chars) : " << sd2 << endl;
    string::iterator iterB = sd2.begin ();
    string sd3 = string ("12345678");
    sd2.insert (sd2.begin(), sd3.begin(), sd3.end()); //insert()函數中使用疊代器
    cout << "Destination sd2 (Insert 8 chars) : " << sd2 << endl;
    sd2.replace (sd2.begin (), sd2.end(), "This is an Exarrple of Replace"); //Replace
    cout <<"Destination sd2 (Replace All): " << sd2 << endl; // replace ()函數中使用疊代器
}
程式執行結果為:

Original: The zip code of Hondelage in Germany is 38108.
Destination: The zip code of Hondelage in Germany is 38108.
Destination (All Toupper)): THE ZIP CODE OF HONDELAGE IN GERMANY IS 38108.
Destination sd1: THE ZIP CODE OF HONDELAGE IN GERMANY IS
Destination sd2: .80183 SI YNAMREG NI EGALEDNOH FO EDOC PIZ EHT
Destination sd2 (Erased 15 chars) : EG NI EGALEDNOH FO EDOC PIZ EHT
Destination sd2 (Insert 8 chars) : 12345678EG NI EGALEDNOH FO EDOC PIZ EHT
Destination sd2 (Replace All): This is an Exarrple of Replace