1. 程式人生 > >筆記2 (標準庫型別string、vector和bitset)

筆記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物件直接表示為位模式