第16章 標準模版庫簡介 第17章 STL string類

1.標準模板庫也就是STL(Standard Template Library). 提供了:存儲信息的容器,訪問容器存儲信息的迭代器,操作容器內容的算法

2.容器是用於存儲數據的STL類,STL提供了兩種類型的容器類:順序容器和關聯容器

3.順序容器是按順序存儲,插入速度快,但是操作和查找比較慢

4.STL的順序容器:std::vector類似數組,在最後插入數據, std:deque類似數組,可以在前後插入數據, std::list類似鏈表

5.關聯容器,插入比較慢,但是查詢快

6.STL的關聯容器:std::set裏面的數據是排序的, std::map存儲健-值對,根據唯一鍵將鍵值對排序, std::multiset和set一樣,但是可以存儲多個相同的值, std::multimap和map一樣,但是可以存儲多個鍵一樣的值

7.STL迭代器,最簡單的迭代器是指針,給出容器的指針,根據順序訪問容器中的值。STL中的迭代器是模版類,也就是泛型指針。

8.STL算法。STL提供了很多常用的算法。:std::find在集合衆查找, std::find_if根據指定的條件查找, std::reverse反轉, std::remove_if根據條件刪除, std::transform變換

9.

vector <int> a;

a.push_back(1);

a.push_back(2);

a.push_back(3);

vector <int>::iterator i = a.begin();

while(i!=a.end())

{

cout << *i << endl;

i++;

}

vector <int>::iterator ie = find(a.begin(), a.end(), 2);

if(ie!=a.end())

{

int n = distance(a.begin(), ie);

}

上面的額程序就是創建了一個整型vector a。然後對a在尾部分別出入1 2 3,然後創建一個迭代器,只想a的開頭,然後逐一迭代輸出。然後對a進行查找只爲2的元素,並把查找到的位置給新定義的迭代器。然後用distance計算出離a的開始的位置。其中begin指向的是a的開頭的元素,end指向的是a的最後一個元素的後面

10.在c++中對字符操作比較繁瑣,所以定義了一個STL的string類。這個類包括了最常用的字符串操作的功能:複製,連接,查找,截斷,反轉,大小寫等。如果用這個類,就要包含頭文件<string>

11.string類提供了我們用到的所有的構造函數。

const char * a = "hello world";

std::string b(a);

std::string b = a;

std::string b("hello world");

std::string c(b);

std::string b(a, 4);//只把a前面的4個字符給b,用來初始化

std::string b(10,'x');//用10個x來初始化b

12.string內容訪問

string a("hello world");

for(size_t n = 0; n < a.length(), n++)

{

cout << a[n] << endl;

}

string::const_iterator i;

for(i=a.begin(); i!=a.end(); i++)

{

cout << *i << endl;

}

cout << a.c_str() << endl;

上面的程序是定義了一個string類a,然後賦值hello world,然後用下標一個個訪問a裏面的內容,然後用迭代器i訪問a裏面的內容,然後用c_str()方法把a裏面的全部內容一次輸出

13.字符串連接。

string a("hello");

string b("world");

a += b;

string c("fun");

a.append(c);

const char * d = "will";

a.append(d);

上面顯示了string類的幾種字符串拼接的方法。一種是直接用+來實現,然後是用append函數來實現

14.查找字符或是字符串

string a("good day string. today is beautiful");

size_t offset = a.fine("day", 0);

if(offset != string::npos)

{

cout << "not find" << endl;

}

offset++;

size_t n = a.fine('a', offset);

上面的代碼就是通過find函數的其中一個方法來尋找字符串或字符.先聲明一個string的變量a,然後從a的第0個索引(也就是第一個)位置開始尋找字符串day。這個函數會返回

一個索引位置,如果沒找到就返回string::npos。後面是把索引位置加1,從這個位置開始尋找字母a

15.字符串截斷

string a("hello string. wake up to a beautiful day");

a.erase(13, 28);

string::iterator i = find(a.begin(), a.end(), 's');

if(i != a.end())

{

a.erase(i);

}

a.erase(a.begin(), a.end());

上面的程序是生命一個a,然後從第13個字符開始,向後刪除28個字符。然後找到剩下的字符串裏面s的位置,然後刪除這個s,然後把字符串從最開始到最後全部刪除

16.字符串反轉

reverse(a.begin(), a.end());

把a從開頭到結尾範圍內的字符串反轉

17.字符串大小寫轉換

string a;

getline(cin, a);

transform(a.begin(0, a.end(), a.begin(), toupper);

上面的程序是先定義一個string的變量a,然後把輸入的所有字符從cin存到a中,然後用transform來轉換,第一個參數是原字符串的起始位置,第二個參數是結束的位置,第三個參數是要寫入字符串的開始位置,第四個參數是對字符串的操作

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章