要看懂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...