《C Primer》 第三章 標準庫型別

2021-09-30 04:23:57 字數 2971 閱讀 8672

除低階資料型別,c++標準庫還定義了許多更高階的抽象資料型別(abstract data type),比如string,vector,bitset。

命名空間的using宣告

使用using宣告可以在不需要加字首namespace_name::的情況下訪問命名空間中的名字。

using  namespace::name;

乙個using宣告一次只能作用於乙個命名空間成員。

如:using  std::cin;

using  std::cout;

using  std::enl;

標準庫string型別

#include

using std::string;

string標準庫支援幾個建構函式,如:

string s1;            //陌生人建構函式,s1為空串

string s2(s1);        //將s2初始化為s1的乙個副本

string s3("value");    //將s3初始化為乙個字串字面值副本

string s4(n,'c');    //將s4初始化為字元'c'的n個副本

因為歷史原因及為了與c語言相容,字串字面值(比如:「value」)與標準庫string型別不是同一型別@!!

string物件的讀寫

1、用cin

cin >> s;

string型別的輸入操作符:

讀取並忽略開頭所有空白字元(如空格,換行,製表)

讀取字元直到再次遇到空白字元,讀取終止。

2、用getline

從輸入流的下一行讀取,並儲存讀取的內容到string中,但不包括換行符。!!並不忽略行開頭的換行符!!如果第乙個字元就是換行符,則string被指為空string。

遇到空格不會停止,會把空格記錄下來。

string物件的操作

s.empty()

s.size()

s[n]

s1 + s2(s3 = s1 + s2; s1 += s2; s3 = s1 + "," + s2 + "/n";)

s1 = s2

v1 == v2

!= , < , <= , > , >=同上

當進行string物件和字串字面值混合連線操作時,+ 操作符的左右運算元必須至少有乙個是string型別的:

string s1 = "hello";                //ok

string s2 = "world";                //ok

string s3 = s1 + ", ";                //ok

string s4 = "hello" + ", ";            //error

string s5 = s1 + ", " + "world";    //ok

string s6 = "hello" + ", " + s2;    //error

s1[0]第乙個字元

s[s.size() - 1]最後乙個字元

任何可產生整型值的表示式都可用作下標操作符的索引。

string::size_type

string物件中字元的處理,在cctype標頭檔案中定義:p77

標準庫vector型別

容器,包含#include,using std::vector;

vectorivec;

vectorsales_vec;

vector不是一種資料型別,而只是乙個類模板,可用來定義任意多種資料型別。

幾種初始化vector物件的方式

迭代器(iterator),各種容器都定義了自己的iterator型別,可替代下標操作

vector::iterator iter;

begin和end操作。

vector::iterator iter = ivec.begin();

const_iterator,指向const物件的引用,它自身的值可以改變,但不能用來改變其所指向的元素的值(只讀取容器內元素(不能改變))。

不要把const_iterator物件和const的iterator物件混淆。

const_iterator物件可用於const vector 或非const vector,而const迭代器幾乎沒用。

迭代器的算術操作:

iter + n

iter - n    //加減的型別應該是vector的size_type或difference_type型別

iter1 + iter2

定位於vector的中間元素:

vector::iterator mid = vi.begin() + vi.size() / 2;        //效率比逐個自增要高

vector::iterator mid = ( vi.begin() + vi.size() ) /2;    //錯誤的,因為( vi.begin() + vi.size() ) /2返回的是difference_type的signed型別,而mid是iterator型別

標準庫bitset型別

#include

using std::bitset;

與vector不一樣的是bitset型別物件的區別僅在其長度而不在於其型別。

bitset<32> bitvec;   //32 bits,all zero

給出的長度值必須是常量表示式,長度值必須定義為整型字面值常量或是已用常量值初始化的整型的const物件。

初始化bitset物件的方法 :p88

bitsetb;

bitsetb(u);

bitsetb(s);

bitsetb(s,pos,n);   

用unsigned值初始化bitset物件   

用string物件初始化bitset物件,注意讀入位集是從右向左!!可以只用某個子串作為初始值;    //p89

注意用某個子串初始化時,pos也是從右開始計算的。

bitset物件上的操作        //p90

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 定義了兩種最重要的標準庫型別 string 和 vector,它們分別定義了大小可變的字串和標準庫。其中,string型別支援長度可變的字串,vector可用於儲存一組指定類 型的物件。3.2標準庫string 型別 string型別支援長度可變的字串,使用者程式要使用string型別物件,必須...

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