C STL vector介紹與使用方法

2021-07-25 09:50:13 字數 2773 閱讀 3707

在前面對比分析裡面提到,vector內部資料結構是動態陣列,也即順序表,因此vector擁有訪問資料快的優點, 但同時也有插入、刪除效率低的缺點。同時,由於是動態陣列,因此不需要考慮資料大小的問題,一旦vector記憶體空間不足,會自動重新分配記憶體,然後將資料拷貝到新的記憶體空間。

vector也是最為常用的序列容器,完全可以替換陣列來使用,這樣在程式設計過程中也會減少很多錯誤,同時vector還提供了一些非常方便的函式。

標頭檔案 #include

建構函式

std::vector

first; // empty vector of ints

std::vector

second (4,100); // four ints with value 100

std::vector

third (second.begin(),second.end()); // iterating through second

std::vector

fourth (third); // a copy of third

stl為標註模板庫,因此所有的容器均以模板的方式提供,在使用過程中,必須向容器指定容器內儲存的資料型別,可以是基本資料型別如:int, float, char, 指標等,同時也可以是自定義的struct或class。

迭代器(迭代器主要使用在演算法部分)
std::vector

first;

std::vector

::iterator iter;

std::vector

::reverse_iterator riter;

iter = first.begin(); //指向序列容器第乙個元素

iter = first.end(); //指向序列容器最後乙個元素的後乙個位置,也即first.end()迭代器指向位置為結束符

riter = first.rbegin();

riter = first.rend();

for (iter = first.begin(); iter != first.end(); iter++)

for (riter = first.rbegin(); riter != first.rend(); riter++)

vector容量
vector

first = ;

first.size(); //返回vector長度大小,有多少個元素

first.max_size(); //返回最大長度,vector是動態陣列,一般不用考慮這個

first.resize(); //改變vector大小,同上,一般不需要考慮

first.empty(); //判斷vector是否為空,沒有元素返回true

在判斷vector是否為空,盡量用empty函式,如果用size()是否為0來判斷,則每次呼叫需要遍歷一遍元素,效率較低。

元素訪問
std::vector

firs(4, 100);

cout

<< first[0] << endl; //直接利用下標訪問元素

cout

<< first.at(0) << endl; //與直接利用下標訪問元素相同,但會檢查引數是否越界,也即大於或等vector的大小

cout

<< first.front() << endl; //返回第乙個元素(first[0])

cout

<< first.back() << endl; //返回最後乙個元素

修改資料成員
std::vector

first;

std::vector

second;

std::vector

third;

second.assign(7, 100); //second裡面指定7個元素,每個元素初始值為100

third.assign(second.begin()+1, second.end()-1); //將second除去首位的元素指派給third

for (int i = 0; i < 4; i++)

int tmp = 0;

tmp = first.pop_back(); //刪除最後乙個元素

std::vector

::iterator it;

it = first.insert(first.begin(), second.begin(), second.end()); //插入元素

it = first.insert(first.begin(), 2, 100); //插入兩個100

it = first.erase(first.begin()); //刪除元素

it = first.erase(first.begin(), first.begin()+3); //刪除頭三個元素

first.swap(second); //first與second互換

first.clear(); //清空vector

it = first.emplace(first.begin, 100); //(c++11)將100插入到vector的開始位置,類似於insert函式,但是insert

it = first.emplace();

C STL vector 使用筆記

定義 用來當長度可變的陣列使用 vector typename name 定義乙個名為name的typename型別vector容器 vectortypename name 定義乙個名為name的typename型別vector容器的容器 類似於二維陣列,之間要加乙個空格訪問 1 直接通過下標訪問 ...

AtomicBoolean介紹與使用

介紹 在這個boolean值的變化的時候不允許在之間插入,保持操作的原子性 方法 compareandset boolean expect,boolean update 這個方法主要兩個作用 1.比較atomicboolean和expect的值,如果一致,執行方法內的語句。其實就是乙個if語句 2....

pkg config介紹與使用

linux c c 編譯鏈結摘 要 一般來說,如果庫的標頭檔案不在 usr include 目錄中,那麼在編譯的時候需要用 i 引數指定其路徑。由於同乙個庫在不同系統上可能位於不同的目錄下,使用者安裝庫的時候也可以將庫安裝在不同的目錄下,所以即使使用同乙個庫,由於庫的路徑的不同,造成了用 i 引數指...