1. 標準庫string
1-1:聲明:#include<string> usingstd::string; //或者using namespace std;
1-2:string對象常用的建構函式
string s1; //預設建構函式,s1為空白串
string s2(s1); //將s2初始化為s1的一個副本
string s3(“value”); //將s3初始化為一個字串字面值副本
string s4(n,’c’); //將s4初始化為字元’c’的n個副本
1-3:string對象的讀寫 cin>>str; cout<<str;
讀取並忽略開頭所有的空白字元(如空格、分行符號、定位字元)
讀取字元直至再次遇到空白字元,讀取終止
對未知數目string的讀入
string str;
while(cin>>str)
cout << str << endl;
當輸入無效字元時停止迴圈(輸入Ctrl+Z)
1-4:getline讀取整行文本,不包括分行符號,且不忽略航開頭的分行符號。
getline的參數:istream輸入資料流對象和 string對象
1-5:string常用操作
str.empty(); 如果str為空白串,返回true否則返回false bool型
str.size(); 返回s中字元的個數 size_type型
str[n]; 返回str中位置為n的字元,位置從0開始計數 char型
str1+str2; 字串串連,返回新的字串 string型。(+左右必須至少有一個是string,不能都是字面值)
str1 += str2; 將str2追加到str1後面
str1 = str2; 字串賦值
str1 == str2;判等操作 相等返回true否則返回false bool型
!= 、<、 <=、 >、>= 保持常有含義
1-6:補充string::size_type
事實上size()返回的是string::size_type類型的值。size_type即為unsigned型。
size_type儲存的string長度是int型所能儲存的兩倍。所以為了儲存大文本string,避免溢出,儲存string對象size最安全的方法就是使用string::size_type類型,例如:
string str;
cin >> str;
string::size_type st = str.size();
1-7:字串比較大小:(與字典排序相同策略,字典中排在前面的小於排在後面的)
如果連個string長度不同,且短的string對象與長的string對象的前面部分相匹配,則短的string對象小雨長的string對象;
如果兩個string對象的字元不同,則比較第一個不匹配的字元。
string str1 = “Hello”; string str2 = “Hello World”; string str3 = “Hiya”;
則 str1 <str2; str3 > str1; str3 > str2;
1-8:賦值本質:string str= “Hello”; sting str2 = “World”; str1 = str2;
先把str1佔用的相關記憶體釋放掉,再分配足夠str1存放str2副本的記憶體空間,最後把str2中的所有字元複製到新分配的記憶體空間。
1-9:單個char字元處理
2. 標準庫vector
2-1:vector是同一種類型的對象的集合,每個對象都有一個對應的整數索引值。和string對象一樣,標準庫將負責管理與儲存元素相關的記憶體。我們把vector成為容器,可以包含其他對象(同一類型)。必須有的聲明:
#include<vector>
using std::vector;
2-2:vector是一個類模板。
2-3:vector對象的定義和初始化:
vector<T>v1; vector檔案類型為T的對象。預設建構函式v1為空白
vector<T> v2(v1); v2是v1的一個副本
vector<T>v3(n,i); v3包含n個值為i的元素
vector<T>v4(n); v4含有值初始化的元素的n個副本
2-4:vector支援動態增長。push_back();函數
2-5:vector常用操作:
v.empty(); 如果v為空白,返回true否則返回false
v.sizse(); 返回vector中個數 size_type類型
v.push_back(t); 增加一個值為t的元素
v[n];
返回v中位置為n的元素
v1= v2;
賦值
v1== v2; 判等
!=、<、>、<=、>= 比較
3. 迭代器iterator。迭代器是一種檢查容器(必須是容器類,例如vector)內元素並遍曆元素的資料類型。
3-1:每種容器類型都定義了自己的迭代器類型,如vector:
vector<int>::iterator iter; //int型的vector迭代器定義語句
3-2:begin和end操作。
iverc.begin(); 返回迭代器指向的第一個元素vector<int>::iterator iter =iverc.begin();
iverc.end(); 超出末端迭代器。end操作返回的迭代器指向vector的“末端的下一個”起到哨兵的作用。
3-3:自增和解引用運算(*)
*iter返回迭代器當前所指向的元素。(*稱為解引用操作符)
iter++;則迭代器向前移動一個位置,指向容器中的下一個元素
3-4:const_iterator該類型只能用於讀取容器內元素,不能改變其值。
注意:中間有底線,不是constiterator
const聲明的iterator對象必鬚生聲明時初始化,一旦初始化後,就不能改變,自增等操作都不可以實現。
const_iterator對象可以用constvector或非const vector,因為不能改寫元素值。const迭代器這種類型幾乎沒什麼用處:一旦它唄初始化,只能用它來改寫其指向元的元素,但不能使它指向任何其他元素。
每日三題(2012-07-31)
(1)讀一組整數到vector對象,計算並輸出每對相鄰元素的和。如果讀入元素個數為奇數,則提示使用者最後一個元素沒有求和,並輸出其值。然後修改程式:頭尾元素兩兩配對(第一個和最後一個,第二個和倒數第二個,以此類推),計算每對元素的和,並輸出。
(2)讀入一段文本到vector對象,每個單詞儲存為vector中的一個元素。把vector對象中每個單詞轉換為大寫字母。輸出vector對象中轉化後的元素,每八個單詞為一行輸出。
(3)編寫程式來建立有10個元素的vector對象。用迭代器把每個元素值改為當前值的2倍。