溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++模板引出的標準模板庫----->初涉

發布時間:2020-09-20 10:01:49 來源:網絡 閱讀:463 作者:暮回_zz 欄目:編程語言

    C++中模板,是相當重要的一部分,前面提到過一些基礎,關于模板中需要注意的問題,會在最近整理出來,今天想說的,是由模板引出的標準模板庫。

    當初經常會被推薦看《STL源碼剖析》這本書,聽說很厲害,是C++高手都需要走過的路,可一直都不知道STL是什么,也一直忘記去查,今天整理出來的一些東西,最起碼可以讓未了解過這方面的童鞋認識一下。

     C++標準模板庫,即STL:Standard Template Lib,STL的產生,是必然的。在長期的編碼過程中,一些程序員發現,有一些代碼經常用到,而且需求特別穩定,于是,各大公司就在出售自己的IDE環境的同時,將這些代碼打包一起銷售,之后,這些大公司就達成共識,認為應該講這部分代碼進一步統一規范,于是,就形成了一套標準模板,也就慢慢演變成了現在的STL。

    C++標準模板庫是一個相當龐大的家族,今天,提到的是一些常用的部分,拿出來和大家分享。其他的使用方法,與今天要提到的這些都特別相似,很多程序員在開發項目的時候,都是隨用隨學?,F在就進入今天的正題。

     

vector向量頭文件:#include<vector>

    vector的本質是對數組的分裝,可以認為它是一個數組,不過相對數組功能更強大,根據存儲的元素個數,自動的變長或者縮短,特點:讀取能在常數時間完成

 

        在VS2013環境下,可以簡單驗證一下。

C++模板引出的標準模板庫----->初涉                

        其中,size是該向量當中現有元素個數,capacity是該向量所能容納最多數組元素  

 

初始化vector對象的方式:

        1、vector<T>v1----->保存類型為T的對象,默認v1為空向量

        2、vector<T>v2(v1)----->用一個向量去初始化另外一個向量

        3、vector<T> v3(n,i)----->v3包含n個值為i的元素,即v3中存儲了n個i

        4、vector<T> v4(n)----->v4包含了值初始化元素的n個副本

 

 

向量常用函數:

            empty()----->判斷向量是否為空<空返回true,非空返回fause>

            begin()----->返回向量迭代器首元素

            end()----->返回向量迭代器末元素的下一個元素

            clear()----->清空向量

            front()----->第一個數據

            back()----->最后一個數據

            size()----->獲得向量中數據大小

            push_back(elem)----->將數據插入向量尾

            pop_back()----->刪除向量尾部數據

    既然說,向量是數組的封裝,那么,無法避免的就要考慮到它的遍歷問題。

向量遍歷有兩種方式:

一、按照數組形式遍歷

        for(int i = 0;i<vec.size;i++)

        {

             cout<<vec[k]<<endl;

        }

二、使用迭代器

向量迭代器的定義方式如下:

     vector<T>::iterator + 變量名  = vec.begin();  //可以理解為這個迭代器變量的類型為vector<T>::iterator,后面之所以要賦值vec.begin(),vec是我定義的向量名,是因為我們要完成遍歷的目的。代碼如下:

int main(void)

{

 vector<int>vec;

 vec.push_back(1);

 vec.push_back(2);

 vec.push_back(3);

 vec.push_back(4);

 vec.pop_back();

 //數組方法

 for (int i = 0; i < vec.size(); i++)

 {

  cout << vec[i] << endl;

 }

 //迭代器方法

 vector <int>::iterator pvec = vec.begin();

 for (; pvec != vec.end(); pvec++)

 {

  cout << *pvec << endl;

 }

 system("pause");

 return 0;

}

鏈表模板:list         頭文件:#include<list>

特點:數據插入速度快

使用方法:與向量使用方法基本相同, 有push、insert、begin、end等函數,也可通過迭代器進行訪問

值得注意的是,list不可以通過數組的方式進行訪問

同樣給出list遍歷的代碼,如下:

int main(void)
{
 list <int>list1;
 list1.push_back(1);
 list1.push_back(2);
 list1.push_back(3);
 list1.push_back(4);
 list<int>::iterator plist = list1.begin();
 for (; plist!= list1.end(); ++plist)
 {
  cout << *plist << endl;
 }
 system("pause");
 return 0;
}

映射模板:map          頭文件:   #include<map>

map中鍵(key)與值(value)是一一對應的,即成對出現,通過關鍵字pair定義若干對key和value,再通過insert函數插入到map中。

 用迭代器遍歷map時,不可以對迭代器前加*直接訪問

給出map遍歷的代碼,如下:

 

int main(void)

{

 map<int, string>m;

 pair <int, string>p1(1,"hello");

 pair <int, string>p2(2, "world");

 pair <int, string>p3(3, "zhou");

 m.insert(p1);//這里不可以用push_back

 m.insert(p2);

 m.insert(p3);

 cout << m.size() << endl;

 ////數組輸出

 //for (int i = 0; i < m.size(); i++)

// {

//  cout << m[i] << endl;

// }

 //迭代器輸出

 map<int, string>::iterator pmap = m.begin();

 cout << m.size() << endl;

 for (; pmap != m.end(); pmap++)

 {

  cout << pmap->first << endl;//first表示鍵

  cout << pmap->second << endl;//second表示值

  cout << endl;  

 }

 system("pause");

 return 0;

}

除此之外,ma元素的數組訪問,和簡單的數組也是有不同的,比如下面這段代碼。

 map<string, string> m;

 pair<string, string> p1("A", "shanghai");

 pair<string, string> p2("B", "beijing");

 m.insert(p1);

 m.insert(p2);

 cout << m["A"] << endl;

 cout << m["B"] << endl;

 

 

 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女