筆記2 (標準庫型別string、vector和bitset)
抽象資料型別(abstract data type)
通常,標頭檔案中應該只定義確定必要的東西
標準庫string 型別
#include<string>
using std::string;
string的定義和初始化
string型別的輸入操作符:
string s;
cin>>s;
讀取並忽略開關所有的空白字元(如空格、換行符,製表符);
讀取字元直到再次遇到空白字元,讀取終止。
string的輸入操作符會返回所給的資料流,因此,可以把輸入當作判斷條件。
用getline讀取整行文字
getline接受兩個引數:一個輸入流物件和一個string物件。
getline並不忽略行開關的換行符。
string型別的輸入操作符和getline函式分別如何處理空白字元:
1、string型別的輸入操作符對空白操作符的處理:讀取並忽略有效字元(非空白字元)之前所有的空白字元,然後讀取字元直到再次遇到空白字元,讀取終止(該空白字元仍然在輸入流中)。
2、getline函式對空白字元的處理:不忽略開關的空白字元,讀取字元直到遇到換行符,讀取終止並丟棄換行符(換行符從輸入流中去掉但並不儲存在string物件中)。
string物件的操作:
s.empty();
s.size();
s[n];
s1 + s2;
s1 = s2;
string物件和字串字面值混合連線操作時,+操作符的左右運算元必須至少有一個string型別的。
string型別可通過下標操作符([ ])訪問string物件的某個字元。
string物件中字元的處理
#include<cctype>
標準庫vector型別
一個容器中的所有物件都必須是同一個型別的。
#include<vector>
using std::vector;
vector是一個類模板(class template)。
vector物件(以及其他標準庫容器物件)的重要屬性就在於可以在執行高效地新增元素,因為vector增長的效率高,在元素什己知的情況下,最好是動態地新增元素。
vector物件的操作
v.empty();
v.size();
v.push_back(t);
v1 = v2;
v1 == v2;
迭代器簡介
迭代器(iterator)所存的標準庫容器都定義了相關的迭代器型別。
若一種型別支援一組確定的操作,(這些操作可用來遍歷容器內的元素,並訪問這些元素的值),我們就稱這種型別為迭代器。
begin和end操作
由begin返回的迭代器指向第一個元素;
由end操作返回的迭代器指向vector的“末端元素的下一個”。通常稱之為超出末端迭代器(off-the-end iterator)。
const_iterator
該型別只能用於讀取容器內元素,但不能更改其值,迭代器本身可以改變。
對const_iterator解引用時,可以得到一個指向const物件的引用。
const_iterator與const iterator不相同,後者基本沒用。
迭代器的自述操作:
iter±n 可用迭代器加上或減去一個整型值
iter1 – iter2 計算兩個迭代器物件的距離,該距離是名為defference_type的signed(只是數值型別,不代表兩型別完全相同)型別的值,iter1與iter2兩者必須都指向同一vector的元素或末端之後的下一個元素。
兩個迭代器相加的操作是末定義的。
標準庫bitset型別
#include<bitset>
using std::vector;
bitset型別物件的區別在公在其長度而不在其基型別。
bitset<n> b;
bitset<n> b(s); //b是string物件s中含有的位串的副本
當用string物件初始化bitset物件時,string物件直接表示為位模式