除第2章介紹的基本數據類型外,C++還定義了一個內容豐富的抽象數據類型標準庫。ios
3.1命名空間的using聲明程序員
在編譯咱們提供的實例程序前,讀者必定要注意在程序中添加適當的#include和using說明。編程
有一種狀況下,必須老是使用徹底限定的標準庫名字:在頭文件中數組
3.2標準庫string類型安全
編程時必定要注意區分字符串字面值和string數據類型的使用。spa
string類型輸入:讀取並忽略開頭全部空白字符,直至再次遇到空白字符讀取終止。指針
getline:接受兩個參數,一個輸入流對象和一個string對象,從輸入流下一行讀取,遇到換行符終止並丟棄換行符。code
任何存儲string的size操做結果的變量必須爲string::size_type類型。不要把size返回值賦給int變量。orm
爲避免溢出,保存一個string對象size最安全的方法是使用標準庫類型string::size_type。對象
當進行string對象和字符串字面值混合鏈接時,+操做符的左右操做數必須至少一個是string類型。
下標操做符須要取一個size_type類型的值,來標明要訪問字符的位置。
C++程序員應採用cname這種頭文件版本,而不是name.h版本,這樣標準庫中的名字在命名空間std中保持一致。使用.h版本會給程序員帶來負擔,由於他們必須記得哪些標準庫名字是從C繼承過來的,哪些是C++所特有的。
3.3標準庫vector類型
vector是同一種類型的對象的集合,每一個對象都有一個對應的整數索引值。
定義vector對象要指定類型和一個變量的列表。
雖然能夠對給定元素個數的vector對象預先分配內存,可是更有效的方法是先初始化一個空的vector對象,而後再動態的增長元素。
push_back()操做接受一個元素值,並將它做爲一個新的元素添加到vector對象的後面。
C++程序員習慣於優先使用!=而不是<來編寫循環判斷條件。
3.4迭代器簡介
迭代器是一種檢查容器內元素並遍歷元素的數據類型。
每一個標準容器類型都定義了一個名爲iterator的成員,這裏的iterator與迭代器實際類型的含義相同,這種類型支持迭代器的各類操做。
end操做返回的迭代器不指向任何元素。
不要把const_iterator對象和const的iterator對象混淆。
迭代器加上或者減去的值應該是vector的size_type或者difference_type類型。
3.5標準庫bitset類型
定義bitset時,要明確bieset含有多少位,須在尖括號中給出它的長度值。
string對象的最右面字符用來初始化bitset對象低階位。
count操做的返回類型是標準庫中命名爲size_t的類型。size_t定義在cstddef頭文件中。
相對於C++內置數據的數組和指針而言,程序員應優先使用標準庫類類型。
習題3.5 從標準輸入每次讀入一行文本
#include<iostream> #include<string> using namespace std; int main() { string line; while(getline(cin,line)) cout<<line<<endl; return 0; }
習題3.8 從標準輸入讀入多個string對象並鏈接起來,鏈接後對象以空格隔開
#include<iostream> #include<string> using namespace std; int main() { string sumstr,str; cout<<"Enter strings(Ctrl+Z to end):"<<endl; while(cin>>str) sumstr=sumstr+' '+str; cout<<"string equal to the concatenation of these strings is:" <<endl<<sumstr<<endl; return 0; }
習題3.10
#include<iostream> #include<string> #include<cctype> using namespace std; int main() { string str,xstr; bool has_punct=false; char ch; cout<<"Enter a string:"<<endl; getline(cin,str); for(string::size_type index=0;index!=str.size();index++) { ch=str[index]; if(ispunct(ch)) has_punct=true; else xstr+=ch; } if(has_punct) cout<<"result:"<<endl<<xstr<<endl; else {cout<<"No pounctuation character in the string?!"<<endl; return -1; } return 0; }
習題3.14
#include<iostream> #include<string> #include<vector> #include<cctype> using namespace std; int main() { vector<string> svec; string str; cout<<"Enter text(Ctrl+Z to end):"<<endl; while(cin>>str) svec.push_back(str); cout<<"Transformed elements from the vector:"<<endl; for(vector<string>::size_type ix=0;ix!=svec.size();++ix) { for(string::size_type index=0;index!=svec[ix].size();++index) if(islower(svec[ix][index])) svec[ix][index]=toupper(svec[ix][index]); cout<<svec[ix]<<" "; if((ix+1)%8==0)cout<<endl; } return 0; }