除低階資料型別,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....