第二章介紹內建類型,本章介紹抽象資料類型庫。
- 其中string和vector是兩種最重要的標準庫類型,前者支援可變長字串,後者表示可變長的集合。
- 還有一種標準庫類型是迭代器,它是string和vector的配套類型,常被用於訪問string中的字元和vector中的元素。
第三章 字串、向量和數組
標準庫類型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<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<string> articles = {"a", "an", "the"};
v.empty()v.size()v.push_back(t)v[n] //返回v中第n個位置上元素的引用v1 = v2v1 = {a,b,c...}v1 == v2v1 != v2<, <=, >, >=
迭代器iterator
一種通用機制:實現使用下標運算子訪問string對象的字元或vector對象的元素。
類似指標類型,提供了對對象的間接訪問。
*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++:變數和基本類型