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來轉換,第一個參數是原字符串的起始位置,第二個參數是結束的位置,第三個參數是要寫入字符串的開始位置,第四個參數是對字符串的操作