c++定義了兩種最重要的標準庫型別:string 和 vector,它們分別定義了大小可變的字串和標準庫。其中,string型別支援長度可變的字串,vector可用於儲存一組指定類
型的物件。
3.2標準庫string 型別
string型別支援長度可變的字串,使用者程式要使用string型別物件,必須包含相關標頭檔案。
#include
3.2.2 string物件的讀寫
#include #include using namespace std;
int main()
從標準輸入讀取string,並將結果儲存在s中。string型別的輸入操作符:
1).讀取並忽略開頭所有的空白字元(比如空格、換行符、製表符)
2).讀取字元直至再次遇到空白字元,讀取終止。
比如輸入「 hello world 」,(開頭跟結尾都有空格),則螢幕上輸出「hello」,而不含任何空格。
如果把多個讀操作或者多個寫操作放在一起:
2. 用getline讀取整行文字
getline接受兩個引數:乙個輸入流物件(比如cin)和乙個string物件。儲存讀取內容到string中,但不包括換行符,不忽略行開頭的換行符。如果第乙個字元是換行符,則
string引數將置為空string。
註解:由於getline函式返回時丟棄換行符,換行符將不會儲存在string中。
3.2.3 string物件的操作
1.string的size和empty操作
string物件的長度指的是string物件中字元的個數(包括空格和換行符等),可以通過size操作獲取
int main()
注:字串是雙引號
如果想判斷string的size是否為0,可以使用empty:
int main()
empty()成員函式將返回bool值,如果string物件為空則返回true,繼續執行;否則返回false,跳出。
2.string::size_type型別
size操作返回的是string::size_type型別的值,它定義為與unsigned型具有相同的含義,而且可以保證足夠大能夠儲存任意string物件的長度。
註解:任何儲存string的size操作結果的變數必須為string::size_type型別。特別重要的是,不要把size的返回值賦給乙個int變數。
3.string關係操作符
比較兩個string值的大小,實際上是比較每個string物件的字元。
大寫字母位於小寫字母之前,任何乙個大寫字母都小於任意的小寫字母。
==操作符:兩個string物件相等是指它們的長度相同,且含有相同的字元。
1)如果兩個string物件長度不同,且短的string物件與長的string物件的前面部分相匹配,則短的string物件小於長的string物件
2)如果兩個string物件的字元不同,則比較第乙個不匹配的字元。
5.兩個string物件相加
strign物件的加法被定義為連線。
·6.和字串字面值的連線。
string s1("hello");
strign s2("world");
string s3 = s1 + "," + s2 + "\n";
當進行string物件和字串字面值混合連線操作時,+操作符的左右運算元必須至少有乙個是string型別,下面是不正確的寫法:
string s = "hello" + "sdfd";
7.從string物件獲取字元
string型別通過下標操作符()來訪問string物件的單個字元。下標操作符需要取乙個size_type型別的值。string物件的下標從0開始。
可用下標操作符分別取出string物件的每個字元,分行輸出:
#include #include using namespace std;
int main()
3.3 標準庫vector型別
vector是同一型別的物件的集合,每個物件都有乙個對應的整數索引值。乙個容器中的所有物件都必須是同一種型別的。
使用vector之前,必須包含相應的標頭檔案:#include
說明vector儲存何種物件的型別,通過將型別放在類模板名稱後面的尖括號中來指定型別:
vectorivec;
vectoesales_vec;
定義vector物件要指定型別和乙個變數的列表。上面第乙個定義,型別是vector,該型別是含有若干int型別物件的vector,變數名為ivec。
3.3.1 vector物件的定義和初始化
1.建立確定個數的元素
若要建立非空的vector物件,必須給出初始化元素的值,可以用元素個數和元素值對vector物件進行初始化,建構函式用元素個數決定vector物件儲存的個數,元素值
指定每個元素的初始值:
vectorivec4(10, -1);
vectorsvec(10, "hi!");
第乙個定義:容器中一共有10個元素,每個元素都是-1;第二個定義:容器一共有10的元素,每個元素都是字串"hi"
3.3.2 vector物件的操作
1.vector物件的size
vector::size_type
2.向vector新增元素
push_back()操作接受乙個元素值,並將它作為乙個新的元素新增到vector物件的後面。
string word;
vectortext;
while (cin >> word)
3.vector的下標操作
vector元素的位置從0開始
for (vector::size_type ix = 0; ix != ivec.size(); ++ix)
註解;c++程式設計師習慣優先選用!=而不是《來編寫迴圈判斷條件。
4.下標操作不新增元素
先給出錯誤的寫法:
for (vector::size_type ix = 0; ix != 10; ++ix)
ivec[ix] = ix;
這裡的ivec是空的vector物件,而且下標只能用於獲取已存在的元素,
正確寫法應該是:
for (vector::size_type ix = 0; ix != 10; ++ix)
ivec.push_back(ix);
3.4 迭代器簡介
迭代器是一種檢查容器內元素並遍歷元素的資料型別,c++程式更傾向於使用迭代器而不是下標操作訪問容器元素。
1.容器的iterator型別
vector::iterator iter;
2.begin和end操作
如果容器中有元素的話,由begin返回的迭代器指向第乙個元素:
vector::iterator iter = ivec.begin();
由end操作符返回的迭代器指向vector的「末端元素的下乙個」,通常稱為超出末端迭代器,表明它指向了乙個不存在的元素。
3.vector解引用運算
使用解引用操作符(*操作符)來訪問迭代器所指向的元素。
*iter = 0;
5.迭代器應用的程式示例
for (vector::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
*iter = 0;
所有元素賦值為0.
6.const_iterator
只能讀取容器內元素,但不能改變其值。
C primer第三章 標準庫型別
一 標準庫string型別 include 1 string物件的定義和初始化 表3.1幾種初始化string物件的方式 string s1 預設建構函式,s1為空串 string s2 s1 將s2初始化為s1的乙個副本 string s3 value 將s3初始化為乙個字串字面值的副本 stri...
《C Primer》 第三章 標準庫型別
除低階資料型別,c 標準庫還定義了許多更高階的抽象資料型別 abstract data type 比如string,vector,bitset。命名空間的using宣告 使用using宣告可以在不需要加字首namespace name 的情況下訪問命名空間中的名字。using namespace n...
C Primer 第三章 標準庫型別
string 物件看成是乙個word,這是這個word中可以是ascii的所有字元。3.2.2 string 物件的讀寫 1.讀入未知數目的string物件 int main string word while cin word 返回讀入的資料流 cout word endl return 0 2....