在前面對比分析裡面提到,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 引數指...