教你使用STL容器之vector

2021-08-22 19:10:57 字數 2945 閱讀 5997

c++語言本身提供了乙個序列式容器array,stl另外再提供vector、list、deque、stack、queue、priority_queue等序列式容器。

vector的資料安排以及操作方式,與array是很相似的,唯一的不同點在於空間的運用的靈活性,array是靜態的,一旦配置了就不能再改變了,而vector是動態開闢空間的,隨著元素的不斷加入,內部機制會自行進行擴充來容納元素。如果每增加乙個元素,擴充乙個空間,是不明智的,所以vector底層實現時,會一次性擴充好舊空間的2倍。

擴充的過程大致如下:開闢新空間; 搬移元素;釋放舊空間。

模擬實現vector

#include
//初始化

vector

v1;//宣告乙個int型的向量,初始值為0

vector

v2(10);//宣告乙個初始值為10的向量,初始值為0

vector

v3(10, 1);//宣告乙個初始值為1且有10個元素的向量

vector

tmp(v3.begin(), v3.begin() + 2);//用v3的第0個到第1個值初始化tmp

int arr = ;

vector

v4(arr, arr + 5);//用陣列元素進行初始化向量

vector

v5(&arr[1], &arr[3]);//用陣列中某一段位址進行初始化向量

監視視窗,主要檢視v4和v5的初始化是否按照我們預期的初始化。

(1)容量(capacity)

v.size();//向量大小

v.max_size();//向量最大容量

v.capacity();//向量真實大小

v.empty();//向量判空

v.resize(newsize);//更改向量的大小

(2)修改(modifiers)
v.assign();//多個元素賦值

v.push_back(data);//尾插

v.pop_back();//尾刪

v.insert();//任意位置插入元素

v.erase();//任意位置刪除元素

v.swap();//交換兩個vector

v.clear();//清空向量元素

將幾個有多個函式原型的修改函式重點拿出來講一下。

assign

assign函式原型:

template

void assign ( inputiterator first, inputiterator last );

void assign ( size_type n, const t& u );

assign的使用:

vector

v1;//宣告乙個int型的向量,初始值為0

insert的函式原型:

iterator insert ( iterator position, const t& x );//在任意位置插入乙個元素

void insert ( iterator position, size_type n, const t& x );//在任意位置插入n個元素

template

void insert ( iterator position, inputiterator first, inputiterator last );//在任意位置插入某一段元素

erase

erase的函式原型:

iterator erase ( iterator position );//刪除任意位置的乙個元素

iterator erase ( iterator first, iterator last );//刪除任意位置的多個元素

swap

swap的函式原型:

void swap ( vector

& vec );//交換兩個陣列的元素

//使用

v1.swap(v2);

v.begin();//開始指標

v.end();//末尾指標

v.rbegin();//反向迭代器的開始指標

v.rend();//反向迭代器的末尾指標

v[2];//下標訪問,不會檢查是否越界

v.at(2);//下標訪問,會檢查是否越界,越界丟擲異常

v.front();//訪問第乙個元素

v.back();//訪問最後乙個元素

遍歷元素
//方法一

vector

::iterator it;

for( it = v.begin(); it != v.end(); it++)

sort(v.begin(), v.end(), comp);

檢視文件進一步學

教你使用STL容器之list

相較於vector的連續線性空間,list就稍微有點複雜,它的好處是每次插入或刪除乙個元素,就配置或釋放乙個元素空間。list對於空間的運用有絕對的精準,一點也不浪費,而且對於任何位置元素的插入和刪除,list時間複雜度為o 1 list底層是乙個帶頭結點的雙向迴圈鍊錶。list的插入和刪除操作都不...

stl容器之順序容器

stl容器分為順序容器和關聯容器 其中順序容器最常用的由vector,list,queue 1.vector vector 向量容器,可以看作變長陣列,長度可根據需要自行變化。使用的標頭檔案 include 定義方式 vector陣列名 vectorar 訪問容器內資料的方式和普通陣列相同,可以用a...

STL之關聯容器

1.set單重集合 不允許key重複 set作為乙個容器,也是用來儲存同一資料型別的資料型別,並且能從乙個資料集合中取出資料 c stl中標準關聯容器set,multiset,map,multimap內部採用的就是一種非常高效的平衡檢索二叉樹 紅黑樹 include using namespace ...