c 標準模板庫 STL

2021-10-04 19:51:30 字數 4252 閱讀 7969

要看懂stl相關,必須了解c++模板

容器stl(標準模板庫)是一套功能強大的 c++ 模板類,提供了通用的模板類和函式,這些模板類和函式可以實現多種流行和常用的演算法和資料結構,如向量、鍊錶、佇列、棧。

stl內嵌在c++中,不需要外部安裝鏈結。

元件描述

容器(containers)

管理某一類物件的集合。c++提供了諸如陣列(array) , 鍊錶(list), tree(樹),棧(stack), 佇列(queue), 集合(set),對映表(map)等各種不同型別的容器

演算法(algorithms)

作用與容器。提供了對容器初始化、排序、搜尋、轉換等操作方式

迭代器(iterators)

用於遍歷物件集合。這裡的集合指容器和容器的子集

stl中收錄了一系列的高效率的數學演算法用於排序、查詢等。stl所有演算法都是基於模板實現

演算法分為質變演算法和非質變演算法:

對乙個容器進行遍歷,是演算法和容器的聯結器。

每種容器有各自的迭代器,迭代器的介面和一般指標類似。不同的演算法需要不同型別的迭代器來實現相應的功能。

迭代器功能

描述輸入迭代器

提供對資料的唯讀訪問

唯讀,支援++、==、!=

輸出迭代器

提供對資料的只寫訪問

只寫,支援++

前項迭代器

提供讀寫操作,並能向前推進迭代器

讀寫,支援++、==、!=

雙向迭代器

提供讀寫操作,能向前和向後操作

讀寫,支援++、-

隨機訪問迭代器

提供讀寫操作,並能以跳躍的方式訪問容器的任意資料,是功能最強的迭代器

讀寫,支援++、-、[n]、-n、<、<=、>、>=

容器就是由**陣列(array) , 鍊錶(list), tree(樹),棧(stack), 佇列(queue), 集合(set),對映表(map)**等資料結構組成的。

根據容器中的排列順序,分為序列式容器和關聯式容器:

每種容器有很多種操作函式,每個練習只能盡可能多的展示出來。

string :字串容器

/*

* string類的原型:

* class string

* * */

#include

#include

using

namespace std;

intmain

(int argc,

char

*gr**)

cout << endl;

}

vector :向量

對於vector、list、deque三種容器:(摘自csdn論壇)

(1)如果你需要高效的隨即訪問,而不在乎插入和刪除的效率,使用vector

(2)如果你需要大量的插入和刪除,而不關心隨機訪問,則應使用list

(3)如果你需要隨機訪問,而且關心兩端資料的插入和刪除,則應使用deque

vector是很常用的容器,類似c語言中的單向鍊錶。

vector可以用來實現佇列、棧等常用資料型別。

vector實現佇列:

#include

#include

using

namespace std;

template

<

class

t>

class

queue

void

pop(

)//出隊,隊頭部刪除

bool

empty()

//佇列判空};

intmain

(int argc,

char

*ar**)

vector實現棧:

#include

#include

using

namespace std;

template

<

class

t>

class

stack

void

pop(

)//出棧

t top()

const

//返回棧頂元素

bool

empty()

};intmain

(int argc,

char

*ar**)

list :雙向鍊錶容器

list實現佇列:

#include

#include

using

namespace std;

template

<

class

t>

class

queue

//佇列,先進先出

void

pop(

)//出隊

bool

empty()

//佇列判空};

intmain

(int argc,

char

*ar**)

queue :佇列容器

stack :棧容器

deque :雙端佇列容器

雙端佇列實現棧:

#include

#include

using

namespace std;

template

<

class

t>

class

stack

//棧,先進後出

void

pop(

)//出棧

t top()

const

//返回棧頂元素

bool

empty()

//棧判空};

intmain

(int argc,

char

*ar**)

priority_queue :按值排序的佇列容器。

set :集合容器。

multiset :允許出現重複元素的集合容器。

map :關聯陣列容器。

map容器提供了一對一的關係(key->value),內部按照key值公升序排列。

#include

#include

#include

using

namespace std;

intmain

(int argc,

char

*ar**)

map<

int,string>

::iterator find_it;

find_it = m.

find(11

);//按key=11查詢元素

if(find_it == m.

end())

//沒有搜尋到

cout <<

"no this elem in map"

<< endl;

cout <<

"find elem:"

<< find_it-

>first <<

"->"

<< find_it-

>second << endl;

map<

int,string>

::iterator erase_it;

erase_it = m.

find(14

);if(erase_it == m.

end())

cout <<

"no this elem in map"

<< endl;

m.erase

(erase_it)

;//刪除key=14的元素

for(erase_it = m.

begin()

;erase_it != m.

end(

);erase_it++

)//迭代器遍歷map容器

return0;

}

multimap :允許出現重複 key 值的關聯陣列容器。

C 標準模板庫STL

stl是標準c 庫的一部分。stl模板類為c 提供了完善的資料結構和演算法。stl的特點 型別引數化 即stl的 中可處理任意自定義型別的物件。泛型程式設計 generic programming 它以模板為基礎,弱化了 實體型別的差異,簡化了程式設計時問題抽象的模型,提供了更好的 封裝性和彈性。s...

C 標準模板庫STL

stl 標準模板庫 包括容器,演算法,迭代器 容器用來儲存資料,比如vector,list,堆疊等,string也算 一共有八個 演算法就是對容器進行操作,比如增刪改查資料 迭代器用來遍歷容器itreator 用指標的方式來遍歷容器的資料 注 平時使用的時候大部分時候我們都用上了,但是面試的時候不能...

c (標準模板庫STL)

stl是一種泛型程式設計 generic programming 容器主要有以下分類 例如 容器的成員函式begin 返回指向容器中第乙個元素的迭代器 end 返回指向容器中最後乙個元素後繼位置的迭代器。下面通過stl中提供的乙個泛型函式find 來說明迭代器與泛型演算法的關係 首先看下stl對於f...