第三章C++:字串string、向量vector和數組

來源:互聯網
上載者:User

第二章介紹內建類型,本章介紹抽象資料類型庫

- 其中stringvector是兩種最重要的標準庫類型,前者支援可變長字串,後者表示可變長的集合
- 還有一種標準庫類型是迭代器,它是string和vector的配套類型,常被用於訪問string中的字元和vector中的元素。

第三章 字串、向量和數組

  • 標頭檔不應包含using聲明。

標準庫類型string

#include <string>using std::string
  • 初始化string

    • 直接初始化(direct initialization)

    • 拷貝初始化(copy initialization):使用等號

      string s1;string s2(s1);string s2 = s2;string s3("hiya");string s3 = "hiya";string s4(10, 'c'); //s4的內容是cccccccccc
  • string對象上的操作

    1. cout << s2. cin >> s         //將string對象讀入s,遇到空白停止3. getline(is, s)   //從輸入資料流is中讀取一行賦給s(分行符號被讀取了,但被丟棄而沒有賦給s),返回is4. s.empty()        //s為空白返回true,否則返回false5. s.size()6. s[n]             //返回s中第n個字元的引用,位置n從0計起          7. s1 + s2          //返回s1和s2串連後的結果8. s1 = s29. s1 == s210. s1 != s211. <, <=, >, >=
    • 邏輯非運算子(!)

  • string::size_type類型:s.size()的傳回值類型,是string類的配套類型。它是一個無符號類型的值,能夠存放下任何string對象的大小。

  • 處理string對象中的字元

    • cctype標頭檔:對單個字元的判斷或處理的函數

      isupper(c)      //c是大寫字母時為真islower(c)tolower(c)      //如果c是大寫字母,則輸出對於的小寫字母;否則原樣輸出toupper(c)isalpha(c)      //c是字母時為真isdigit(c)      //c是數字時為真isalnum(c)      //c是字母或數字時為真ispunct(c)      //c是標點符號時為真isspace(c)      //c是空白時為真(即c是空格、橫向定位字元、縱向定位字元、斷行符號符、分行符號、進紙符的一種)iscntrl(c)      //c是控制字元時為真isgraph(c)      //c不是空格但可列印時為真isprint(c)      //c是可列印字元時為真(即c是空格或具有可視形式)isxdigit(c)     //十六進位數
    • 使用C++版本的C標準庫標頭檔,形如name.h,C++++中這些檔案命名為cname,內容一樣,且標頭檔cname中定義的名字從屬於命名空間std。

  • 範圍for(range for)語句

for (declaration : expression)    statement例如:string str("some string");//每行輸出str中的一個字元for(auto c : str)    cout << c <<endl;

標準庫類型vector

vector是一個類模板(class template)。vector表示對象的集合,其中所有對象的類型都相同。集合中的每個對象都有一個與之對應的索引,索引用於訪問對象。vector也常被稱為容器(container).

  • 定義和初始化vector對象

vector<T> v1vector<T> v2(v1)vector<T> v2 = v1vector<T> v3(n, val)vector<T> v4(n)vector<T> v5{a,b,c...}vector<T> v5 = {a,b,c...}
  • 列表初始化vector對象

vector<string> articles = {"a", "an", "the"};
  • 向vector對象中添加元素

    運行時才知道vector對象中確切的個數:

    string word;vector<string> text;while (cin >> word) {    text.push_back(word);}
    • vector對象能高效增長:vector能在運行時高效快速地添加元素。

    • 如果迴圈體內包含有向vector對象添加元素的語句,則不能使用++範圍for++迴圈。

    • push_back:把一個值當成vector對象的尾元素“壓到(push)”vector對象的“尾端(back)”。

      vector<int> v2;for(int i=0; i != 100; ++1)    v2.push_back(i);
  • 其他vector操作

v.empty()v.size()v.push_back(t)v[n]        //返回v中第n個位置上元素的引用v1 = v2v1 = {a,b,c...}v1 == v2v1 != v2<, <=, >, >=

迭代器iterator

一種通用機制:實現使用下標運算子訪問string對象的字元或vector對象的元素。

類似指標類型,提供了對對象的間接訪問。

  • begin和end成員

    //由編譯器決定b、e的類型//b表示v的第一個元素,e表示v尾元素的下一個元素auto b = v.begin(), e = v.end();    //b、e類型相同
    • end成員返回的迭代器常被稱作尾後迭代器(off-the-end iterator),或者簡稱尾迭代器。

    • 如果容器為空白,則begin和end返回的都是尾後迭代器。

  • 標準容器迭代器運算子

*iter           返回迭代器iter所指元素的引用iter->men       解引用iter並擷取鈣元素的名為mem的成員,等價於(*iter).mem++iter--iteriter1 == iter2iter1 != iter2
//將字串首字母改成大寫string s("some string");if (s.begin() != s.end()) {    auto it = s.begin();    *it = toupper(*it);}//將迭代器從一個元素移動到另一個元素,把字串中第一個單詞改為大寫//注意,使用的是!=,而不是<for(auto it = s.begin(); it != s.end() && !isspace(*it); ++it)    *it = toupper(*it);
  • #### 迭代器類型

擁有迭代器的標準庫使用iterator和const_iterator來表示迭代器的類型:

vector<int>::iterator it;           //it能讀寫vector<int>中的元素string::iterator it2;               //it2能讀寫string對象中的字元vector<int>::const_iterator it3;    //it3隻能讀元素,不能寫元素string::const_iterator it4;         //it4隻能讀字元,不能寫字元

參考:C++Primer第五版

第二章介紹內建類型,本章介紹抽象資料類型庫
- 其中stringvector是兩種最重要的標準庫類型,前者支援可變長字串,後者表示可變長的集合
- 還有一種標準庫類型是迭代器,它是string和vector的配套類型,常被用於訪問string中的字元和vector中的元素。

相關文章:

第一章C++:函數傳回值、GNU編譯器命令

第二章C++:變數和基本類型

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.