c++stl(standard template library)標準模板庫是通用類模板和演算法的集合。包含一些標準的資料結構的實現如queues(佇列),lists(鍊錶),stacks(棧)等。stl提供了以下三類資料結構的實現:
標準容器類:
順序性容器
vector
從後面快速插入和刪除,直接訪問任何元素
deque
從前面或後面快速插入和刪除,直接訪問任何元素
list
雙鏈表,從任何地方快速插入和刪除
容器介面卡
statck
後進先出
queue
先進後出
priority_queue
最高優先順序元素總是第乙個出列
關聯容器
set快速查詢,不允許重複值
multiset
快速查詢,允許重複值
map一對多對映,基於關鍵字快速查詢,不允許重複值
multimap
一對多對映,基於關鍵字快速查詢,允許重複值
現在開始具體解釋:
1、vector
vector容器就相當於乙個陣列,但其大小可以不可預先指定,並且自動擴充套件,完全可以把它看成乙個動態陣列。在建立乙個vector後,它會在記憶體中分配一塊連續的記憶體空間進行資料儲存,初始的大小可以預先制定也可以由vector預設指定。當記憶體使用完後它會自動增加記憶體。並且這個過程比較耗時,如下:
首先,vector 會申請一塊更大的記憶體塊;
然後,將原來的資料拷貝到新的記憶體塊中;
其次,銷毀掉原記憶體塊中的物件(呼叫物件的析構函式);
最後,將原來的記憶體空間釋放掉。
建構函式
vectorv1; //構造乙個空的vector
vectorv1( 5, 42 ); //構造了乙個包含5個值為42的元素的vector
常用函式
at() 返回指定位置的元素
push_back() 在vector最後新增乙個元素
size() 返回vector元素數量的大小
**示例如下:其中一定要包含標頭檔案vector
12 #include "
vector
"3 #include "
iostream"4
using
namespace
std;56
intmain()713
for (int i=0;i<10;i++)
1417
getchar();
18return0;
19 }
resize() 改變vector元素數量的大小
voidresize( size_type size, type val ); //改變當前vector的大小為size,且對新建立的元素賦值val
arr.resize(20,22);//改變當前vector的大小為20,且對新建立的元素賦值22
back() 返回最末乙個元素,如下:
1 coutcapacity() 返回vector所能容納的元素數量(在不重新分配記憶體的情況下)cout返回vector所能容納的元素數量(在不重新分配記憶體的情況下)empty() 判斷vector是否為空(返回true時為空)
1if(arr.empty())//
判斷vector是否為空(返回true時為空) 25
else
6 cout<<"
vector is not empty!
";
clear() 清空所有元素
arr.clear();//清空所有元素,之後可以判斷一下是否清空
max_size() 返回vector所能容納元素的最大數量(上限)
cout<<"vector所能容納元素的最大數量(上限) :
"vector所能容納元素的最大數量(上限)
swap() 交換兩個vector,經過測試,兩個容器的大小對交換結果沒有影響,不論誰大,都不影響。
swap(arr,arr2);//交換兩個容器中的內容
pop_back() 移除最後乙個元素
arr.pop_back();//移除最後乙個元素
front() 返回第乙個元素的引用
coutfront() 返回第乙個元素的引用begin() 返回第乙個元素的迭代器
end() 返回最末元素的迭代器(譯註:實指向最末元素的下乙個位置)
insert() 插入元素到vector中
iterator insert( iterator loc, const type &val ); //在指定位置loc前插入值為val的元素,返回指向這個元素的迭代器,
void insert( iterator loc, size_type num, const type &val ); //在指定位置loc前插入num個值為val的元素
void insert( iterator loc, input_iterator start, input_iterator end ); //在指定位置loc前插入區間[start, end)的所有元素
erase() 刪除指定元素
iterator erase( iterator loc );//刪除loc處的元素
iterator erase( iterator start, iterator end );//刪除start和end之間的元素
1 vector ::iterator it;//宣告乙個迭代器
2 it = arr.begin();//
指向第乙個元素的迭代器
3 arr.erase(it);//
刪除指定位置的元素4//
arr.erase(it,it+4);
//刪除某一區間的元素
5for (int i=0;i< arr.size();i++)
69 cout<10 it =arr.begin();
11//
arr.insert(it,0);
//在指定位置loc前插入值為val的元素,返回指向這個元素的迭代器,
12 arr.insert(it,3,99); //
在指定位置it前插入3個值為99的元素
13for (int i=0;i< arr.size();i++)
14
reserve() 設定vector最小的元素容納數量
arr.reserve(20);//為當前vector預留至少共容納size個元素的空間
STL基礎1 vector的實現
本文的 主要實現了vector 的 1.基本操作如 push back pop back size back 2.操作符的過載如 include using namespace std templateclass myvector 複製建構函式 myvector const myvector rhs...
C 知識點 STL容器1 vector
vector可能是與各位選手見面次數最多的stl容器了 這是因為它在圖論問題中發揮的特殊而重要的作用 簡單來說vector就是乙個能根據需求改變自己長度的陣列 它有乙個空間的初始值,一旦初始值滿則向記憶體申請兩倍的空間 同樣的,它支援像陣列一樣使用下標訪問,不是修改 也像陣列一樣不能o 1 在任意位...
標準模板庫(STL)使用說明 之 1 vector
stl standard template library 是乙個具有工業強度的高效c 程式庫。它被容納於c 標準程式庫 c standard library 中,是ansi iso c 標準中最新的也是極具革命性的一部分。該庫包含了諸多在電腦科學領域裡所常用的基本資料結構和基本演算法。為廣大c 程...