STL標準模板庫

2021-08-19 19:33:12 字數 4726 閱讀 1410

stl標準模板庫

一。概述

c++內建的標準模板庫stl可以分為以下6大類:

1.容器

2.迭代器

3.空間分配器

4.介面卡

5.演算法

6.仿函式

1.容器:

概念:用來管理一組元素

分類:序列式容器(sequence containers)

每個元素都有固定位置--取決於插入時機和地點,和元素值無關。

vector、deque、list  

關聯式容器(associated containers)

元素位置取決於特定的排序準則,和插入順序無關 

string的構造方法:string s;string s1("helloworld");string s2(s1);string s3=s1;

string訪問字串的操作:string s;  s.at("helloworld");用這個函式來訪問字串當越界時會丟擲異常,而把string當成字串陣列用陣列下表訪問時,及時越界也不會丟擲異常,容易訪問到界外記憶體引起段錯誤

s.c_str();用來獲取字串的首位址

s.copy()的幾種用法:

string s("helloword");   

char buff[100];

s.copy(buff,5,5);//將字串s從第5個開始後面5個字元考給buff;第3個形參不寫的化預設到末尾

s.length();//求字串長度

s.empty();//是否為空,為空返回1

賦值string &assign(const char *s);//把字串s賦值給當前字串

string &assign(const char *s,int n);//把字串s的錢n個字元賦值給當前字串

string &assign(int n,char c);//將n個c賦值給當前字串

string &assign(const char *s,int start,int n);//把字串s從start開始的後n個字元賦值給當前字串

鏈結比較:

int compare(const string &s)const;

int compare(const char *s)const;

返回值,大於返回1;小於返回-1;等於返回0

查詢:int find(char c,int pos=0);//從pos位開始找c字元,返回值為c字元所在的位置

int find(const char *s,int pos =0);//從pos位開始找s字串,返回值為s字串所在的位置

int find(const string &s,int pos =0);//從pos位開始找s字串,返回值為s字串所在的位置

找不到返回-1;

替換:string &replace(int pos,int n,const char *s);

string &replace(int pos,int n,const string &s);//從pos位開始後面n個用字串s替換

插入:string &insert(int pos,const char *s);

string &insert(int pos,const char *s);//在pos位插入s字串

刪除:string &erase (int pos =0,int n=npos);//如果無參的化,預設從頭刪到尾

vector 

vector是將元素置於乙個動態陣列中加以管理的容器,vector採用模板類實現,vector物件的預設構造形式

vectorvect;

vectorvecint;            //乙個存放int的vector容器。

vectorvecfloat;        //乙個存放float的vector容器。

vectorvecstring;    //乙個存放string的vector容器。

...                  //尖括號內還可以設定指標型別或自定義型別。

class ca{};

vectorvecpca;        //用於存放ca物件的指標的vector容器。

vectorvecca;       //用於存放ca物件的vector容器。由於容器元素的存放是按值複製的方式進行的,所以此時ca必須提供ca的拷貝建構函式(手寫深拷貝函式),以保證ca物件間拷貝正常。

vector(beg,end);    //建構函式將[beg, end)區間中的元素拷貝給本身。注意該區間是左閉右開的區間。(這裡的begin和end都是迭代器,也就是類似指標)

vector(n,elem);   //建構函式將n個elem拷貝給本身。

vector(const vector &vec);  //拷貝建構函式

int  iarray = ;

vectorvecinta( iarray,  iarray+5 );

vectorvecintb (  vecinta.begin() , vecinta.end()  );   //用建構函式初始化容器vecintb 

vectorvecintb (  vecinta.begin() , vecinta.begin()+3  );  

vectorvecintc(3,9); //此**執行後,容器vecintb就存放3個元素,每個元素的值是9。

賦值vector.assign(beg,end);    //將[beg, end)區間中的資料拷貝賦值給本身。注意該區間是左閉右開的區間。

vector.assign(n,elem);  //將n個elem拷貝賦值給本身

ector& operator=(const vector  &vec);    //過載等號操作符

vector.swap(vec);  // 將vec與本身的元素互換。

vectorvecinta, vecintb, vecintc, vecintd;

int  iarray = ;

vecinta.assign(iarray,iarray+5);

vecintb.assign( vecinta.begin(),  vecinta.end() );    //用其它容器的迭代器作引數。

vecintc.assign(3,9);//3個9賦值給

vectorvecintd;

vecintd = vecinta;//等號

vecinta.swap(vecintd);

大小:vector.size();     //返回容器中元素的個數

vector.empty();    //判斷容器是否為空

vector.resize(num);   //重新指定容器的長度為num,若容器變長,則以預設值填充新位置。如果容器變短,則末尾超出容器長度的元素被刪除。

vector.resize(num, elem);  //重新指定容器的長度為num,若容器變長,則以elem值填充新位置。如果容器變短,則末尾超出容器長度的元素被刪除。

資料訪問:

vec.at(idx);     //返回索引idx所指的資料,如果idx越界,丟擲out_of_range異常。

vec[idx];      //返回索引idx所指的資料,越界時,執行直接報錯

迭代器:

迭代器就如同乙個指標。

迭代器提供對乙個容器中的物件的訪問方法,並且可以定義了容器中物件的範圍。

這裡大概介紹一下迭代器的類別。

輸入迭代器:也有叫法稱之為「唯讀迭代器」,它從容器中讀取元素,只能一次讀入乙個元素向前移動,只支援一遍演算法,同乙個輸入迭代器不能兩遍遍歷乙個序列。

輸出迭代器:也有叫法稱之為「只寫迭代器」,它往容器中寫入元素,只能一次寫入乙個元素向前移動,只支援一遍演算法,同乙個輸出迭代器不能兩遍遍歷乙個序列。

正向迭代器:組合輸入迭代器和輸出迭代器的功能,還可以多次解析乙個迭代器指定的位置,可以對乙個值進行多次讀/寫。

雙向迭代器:組合正向迭代器的功能,還可以通過--操作符向後移動位置。

隨機訪問迭代器:組合雙向迭代器的功能,還可以向前向後跳過任意個位置,可以直接訪問容器中任何位置的元素。

目前本系列教程所用到的容器,都支援雙向迭代器或隨機訪問迭代器,下面將會詳細介紹這兩個類別的迭代器。

插入:vector.insert(pos,elem);   //在pos位置插入乙個elem元素的拷貝,返回新資料的位置。

vector.insert(pos,n,elem);   //在pos位置插入n個elem資料,無返回值。

vector.insert(pos,beg,end);   //在pos位置插入[beg,end)區間的資料,無返回值 

刪除:vector.clear();    //移除容器的所有資料

vec.erase(beg,end);  //刪除[beg,end)區間的資料,返回下乙個資料的位置。

vec.erase(pos);    //刪除pos位置的資料,返回下乙個資料的位置。

佇列:deque是「double-ended queue」的縮寫,和vector一樣都是stl的容器,deque是雙端陣列,而vector是單端的。

deque在介面上和vector非常相似,在許多操作的地方可以直接替換。

deque可以隨機訪問元素(支援索引值直接訪問, 用操作符或at()方法,這個等下會詳講)。

deque頭部和尾部新增或移除元素都非常快速。但是在中部安插元素或移除元素比較費時。

需要包含標頭檔案#include

STL 標準模板庫)

此篇只是乙個目錄,將分成單篇去完成 stl 主要有三個部分組成 容器,迭代器,演算法。順序容器 向量 vector 雙端佇列 dequeue 表 list ps copy 方法 關聯容器 集合 set 多重集合 multiset 對映 map 多重對映 multimap 容器介面卡 棧 stack ...

Stl(標準模板庫)

stl 標準模板庫 stl的目的是標準化元件,這樣就不用重新開發,可以使用現成的元件。我們常用到的stl容器有vector list deque map multimap set和multiset。1.簡單概括 如果需要高效的隨機訪問,不在乎插入和刪除的效率,使用vector 類似陣列 2 如果需要...

STL標準模板庫

函式模板的定義與使用 函式家族 語法形式 型別引數 typename 例項化 二次編譯 包含模型。函式模板包含兩種引數,一種是模板引數,即在模板名之前,用一對尖括號括起來的引數 另一種是呼叫引數,在模板名之前,用一對圓括號括起來的引數 如果函式模板呼叫引數的型別相關於該模板時,即使不顯式指定模板引數...