//STL有三大核心部分,容器(Container)、算法(Algorithms)、迭代器(Iterator),容器適配器(container adaptor),函數對象(functor),除此之外還有其他STL其他標準組件。通俗講:
//容器:就像裝東西的容器,STL裏的容器,是可容納一些數據的模板類。
//算法:就是容器裏的東西。STL裏的算法,就是處理容器裏面數據的方法。
//迭代器:是容器的管理員。STL裏的迭代器:用來遍歷容器中數據對象。對存儲於容器的數據進行處理時,迭代器能從一個成員移向另一個成員。它能按預先定義的順序在某些容器中的成員間移動。
//STL簡介
//STL(Standard Template Library,標準模板庫)是惠普實驗室開發的一系列軟件的統稱。現在雖說它主要在C++中。但在被引入C++之前,該技術就已經存在了很長時間了。
//在C++標準庫中,STL被組織爲下面13個頭文件:
//1#include <algorithm> 算法
//2#include <deque> 雙端隊列容器
//3#include <functional> 運算函數(代替運算符)
//4#include <iterator> 向量
//5#include <vector> 動態數組容器
//6#include <list> STL 線性列表容器
//7#include <map> STL映射容器
//8#include <memory> 給容器、管理內存的函數和auto_ptr模板類定義標準內存分配器
//9#include <numeric> 在數值序列上定義一組一般數學操作。
//10#include <queue> 隊列容器
//11#include <set> 集合容器
//12#include <stack> 堆棧容器
//13#include <utility> 通用模板類
字符串
#include <iostream> //string類簡介 //C++兼容C對字符串的處理方式,與此同時還在標準庫(STL)中提供了string類,可以很容易的使用string類對字符傳進行操作。 //先引入頭文件 #include <string> using namespace std; int main(int argc, const char * argv[]) { //字符串初始化 string name = "jiaoshenmene"; //字符串賦值 string str2; str2.assign("xiaonan"); cout<<str2<<endl; //字符串處理 字符串拼接 name += str2; cout<<name<<endl; //字符串長度 cout<<"字符串長度 = "<<name.length()<<endl; return 0; }
代碼下載地址: http://pan.baidu.com/share/link?shareid=1247823885&uk=3189484501
向量
1、向量的初始化方式:
#include <iostream> using namespace std; //向量 //需要加頭文件#include <vector> vector 是一種動態數組,是基本數組的類模板。其內部定義了很多基本操作。既然這是一個類,那麼它就會有自己的構造函數。vector類中定義了4種構造函數: //1、默認構造函數,構造一個初始長度爲0的空向量,例如:vector<int> v1; //2、形式例如:vector<int> v2(5,10); 意思是向量中有5個元素。數值爲10; //3、形式例如:vector<int> v3(v2); 將向量v2複製到v3 //4、形式例如:vector<int> v4(ar,ar+3);第一個參數:數組開始的位置,第二個參數數組結束的位置 #include <vector> int main(int argc, const char * argv[]) { //第一種初始化方式 vector<int> v1; //第二種初始化方式 vector<int> v2(5,10); cout<<v2.size()<<endl; //第三種初始化的方式 vector<int> v3(v2); cout<<v3.size()<<endl; //第4中初始化方式 int ar[3] = {12,43,54}; vector<int> v4(ar,ar+3); for (int i = 0; i <3; i++) { cout<<v4[i]<<endl; } return 0; }
代碼下載地址:http://pan.baidu.com/share/link?shareid=3742353952&uk=3189484501
2、向量主要成員函數的使用:
#include <iostream> #include <vector> using namespace std; int main(int argc, const char * argv[]) { //初始化一個空的向量對象 v1 vector<int> v1; //初始化一個向量對象 其內容包含10個元素,值爲6; vector<int> v2(10,6); //利用複製初始化方式,將向量v2中從開始的數值到第三個數值複製給v3. vector<int> v3(v2.begin(),v2.begin() + 3); //顯示v3中的數據 for (int i =0; i < v3.size(); i++) { cout<<v3[i]<<endl; } cout<<"----------"<<endl; //添加數據的方法 v3.push_back(2); //下面的循環要4次,因爲剛纔添加了一個新的數據2 在最後 for (int i =0; i < v3.size(); i++) { cout<<v3[i]<<endl; } cout<<"----------"<<endl; v3.insert(v3.begin(), 4); for (int i =0; i < v3.size(); i++) { cout<<v3[i]<<endl; } cout<<"----------"<<endl; //取向量值的方法 cout<<"取第一個成員 = "<<v3.front()<<endl; cout<<"取最後一個成員 = "<<v3.back()<<endl; cout<<"取指定位置的成員,這裏取第3個 = "<<v3.at(3)<<endl; cout<<"----------"<<endl; //刪除成員 v3.pop_back(); // 將最後一個成員移除 v3.erase(v3.begin() + 1, v3.end());//刪除成員 第一個參數指定開始位置 第二個參數結束的位置。 for (int i =0; i < v3.size(); i++) { cout<<v3[i]<<endl; } cout<<"----------"<<endl; //賦值函數 這裏我們又重新給v3賦值了。 v3.assign(3, 2); for (int i =0; i < v3.size(); i++) { cout<<v3[i]<<endl; } return 0; }
2、向量主要成員函數的使用代碼下載地址:http://pan.baidu.com/share/link?shareid=312142971&uk=3189484501
隊列
using namespace std; //隊列是一種先進先出的排列,使用時需要包含頭文件 #include <queue> int main(int argc, const char * argv[]) { deque<int> deq1;//初始化一個空隊列 //給隊列賦值 隊列中有5個值爲6的成員 deq1.assign(5, 6); cout<<"顯示隊列中的數據--------------------"<<endl; //顯示隊列中的數據 for (int i = 0;i < deq1.size(); i++) { cout<<deq1[i]<<endl; } cout<<"在隊列的尾部加入數據--------------------"<<endl; //在隊列的尾部加入數據 deq1.push_back(4); //顯示隊列中的數據 for (int i = 0;i < deq1.size(); i++) { cout<<deq1[i]<<endl; } cout<<"在隊列頭部加入數據--------------------"<<endl; //在隊列頭部加入數據 deq1.push_front(9); //顯示隊列中的數據 for (int i = 0;i < deq1.size(); i++) { cout<<deq1[i]<<endl; } cout<<"在隊列中指定的位置加入數據--------------------"<<endl; //在隊列中指定的位置加入數據,其中deq1.begin()代表隊列的開始, deq1.insert(deq1.begin()+ 1,7); //顯示隊列中的數據 for (int i = 0;i < deq1.size(); i++) { cout<<deq1[i]<<endl; } cout<<"從隊列尾部刪除--------------------"<<endl; //刪除方法 //從隊列尾部刪除 deq1.pop_back(); //顯示隊列中的數據 for (int i = 0;i < deq1.size(); i++) { cout<<deq1[i]<<endl; } cout<<"從隊列的頭部刪除--------------------"<<endl; //從隊列的頭部刪除 deq1.pop_front(); //顯示隊列中的數據 for (int i = 0;i < deq1.size(); i++) { cout<<deq1[i]<<endl; } cout<<"在隊列中刪除指定位置的數據--------------------"<<endl; //在隊列中刪除指定位置的數據 deq1.erase(deq1.begin() +1); //顯示隊列中的數據 for (int i = 0;i < deq1.size(); i++) { cout<<deq1[i]<<endl; } cout<<"--------------------"<<endl; return 0; }
代碼下載: http://pan.baidu.com/share/link?shareid=222282222&uk=3189484501
鏈表
#include <list> #include <iterator> using namespace std; //List (鏈表),是一種雙線性列表,只能順序訪問(從前向後或者從後向前),使用時需 int main(int argc, const char * argv[]) { list<int> list1,list2; list<int> ::iterator listIterator; list1.push_back(123); list1.push_back(23); cout<<"查看數據-------------"<<endl; for (listIterator = list1.begin(); listIterator != list1.end(); ++listIterator) { cout<<*listIterator<<endl; } cout<<"排序後-------------"<<endl; //sort()排序 list1.sort(); for (listIterator = list1.begin(); listIterator != list1.end(); ++listIterator) { //使用遍歷器方式,*listIterator是指針間接形式,它的意思是it所指向的元素值。 cout<<*listIterator<<endl; } list2.push_back(54); list2.push_back(34); // list1.merge(list2); //鏈表並接 第一個參數的意思是拼接的位置list1.end()指的是將list2接到list1的尾部 list1.splice(list1.begin(), list2); cout<<"拼接後-------------"<<endl; for (listIterator = list1.begin(); listIterator != list1.end(); ++listIterator) { cout<<*listIterator<<endl; } return 0; }
代碼下載:
http://pan.baidu.com/share/link?shareid=812483902&uk=3189484501