首頁  >  文章  >  後端開發  >  第三章C++:字串string、向量vector和陣列

第三章C++:字串string、向量vector和陣列

php是最好的语言
php是最好的语言原創
2018-08-06 10:36:002367瀏覽

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

- 其中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, &#39;c&#39;); //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第五版第二章介紹內建類型,本章介紹抽象資料類型庫
- 其中string

vector

是兩個最重要的標準函式庫類型,前者支援

可變長字串

,後者表示可變長的集合

- 還有一種標準函式庫類型是###迭代器###,它是string和vector的配套類型,常被用來存取string中的字元和vector中的元素。 ######相關文章:#########第一章C :函數傳回值、GNU編譯器指令######

第二章C :變數與基本型別

以上是第三章C++:字串string、向量vector和陣列的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn