C++第5章 STL應用

//STL有三大核心部分,容器(Container)、算法(Algorithms)、迭代器(Iterator),容器適配器(container adaptor,函數對象(functor),除此之外還有其他STL其他標準組件。通俗講:

//容器:就像裝東西的容器,STL裏的容器,是可容納一些數據的模板類。

//算法:就是容器裏的東西。STL裏的算法,就是處理容器裏面數據的方法。

//迭代器:是容器的管理員。STL裏的迭代器:用來遍歷容器中數據對象。對存儲於容器的數據進行處理時,迭代器能從一個成員移向另一個成員。它能按預先定義的順序在某些容器中的成員間移動。


//STL簡介

//STLStandard 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



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