C Primer 第三章 標準庫型別

2021-08-07 15:06:48 字數 4388 閱讀 9568

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....