STL中的向量 vector

2021-10-04 15:25:26 字數 2256 閱讀 4213

向量(vector)是乙個封裝了動態大小陣列的順序容器(sequence container)。跟任意其它型別容器一樣,它能夠存放各種型別的物件。可以簡單的認為,向量是乙個能夠存放任意型別的動態陣列。當程式設計師無法知道自己需要的陣列的規模多大時,用 vector 來解決問題可以達到最大節約空間的目的。

vector是一塊連續分配的記憶體,從資料安排的角度來講,和陣列極其相似, 不同的地方就是:

vector的擴充機制:按照容器現在容量的一倍進行增長。 vector容器分配的是一塊連續的記憶體空間,每次容器的增長,並不是在原有連續的記憶體空間後再進行簡單的疊加, 而是重新申請一塊更大的新記憶體,並把現有容器中的元素逐個複製過去,然後銷毀舊的記憶體。 這時原有指向舊記憶體空間的迭代器已經失效,所以當操作容器時,迭代器要及時更新。

size 和 capacity 兩個屬性分別對應兩個方法:resize() 和 reserve()

示例:

#include #include using namespace std;

int main()

執行結果:

v.size() == 0, v.capacity() = 0 //初始化完成,但是容器中沒有物件,也沒有預留記憶體空間

v.size() == 0, v.capacity() = 10 //reserve(10),預留10個物件的空間,但是容器內依然沒有物件,如果使用 訪問會報越界錯誤

v.size() == 11, v.capacity() = 20 //resize(10),容器內的物件空間為10個物件的空間,此時再新增乙個物件,就要重新分配一次空間,容量為原先的一倍。並把現有容器中的元素逐個複製過去,然後銷毀舊的記憶體

注意:capacity 和 reserve 只適用於 string 和 vector,stl容器中擁有 capacity 屬性的只有 string 和 vector。構造

新增

刪除 遍歷

大小 其他

template class mymatrix1f // 列向量類

mymatrix1f(t x, t y) // 有參建構函式

mymatrix1f(const mymatrix1f& vec) // 拷貝建構函式

}t operator()(size_t index) // 過載運算子()

return matrix.at(index);

}void push(t value) // 列向量新增元素

void print() // 列印列向量所有元素

cout << endl;

}private:

vectormatrix;

};template class mymatrix3f: public vector> // 3x3變換矩陣類

t operator()(size_t x, size_t y) // 過載運算子()

vectorvec = this->at(x);

if (y >= vec.size())

return vec.at(y);

}mymatrix1foperator*(mymatrix1f& matrix) // 過載運算子*

ret.push(value);

}return ret;

}void print() // 列印3x3變換矩陣所有元素

cout << endl;}}

};#endif // mymatrix_h

main.cpp

#include "mymatrix.h"

int main()

執行結果:

2 4 1

matrix1f(1): 4

0.5 -0.866025 10

0.866025 0.5 20

0 0 1

matrix3f(1,2): 20

7.5359 23.7321 1

實現STL中的向量 vector

用到陣列就會想到對應的可以動態增加空間的向量vector 下面是模擬stl的基本功能,參 c primer 第四版 將實現檔案也寫到類中的,可以無視 風格 這裡用到了記憶體管理的類 allocator allocatora 定義allocator的物件,可以構造分配t型別的物件 a.allocate...

STL 向量vector詳解

vector是stl中最常見的容器,它是一種順序容器,支援隨機訪問。vector是一塊連續分配的記憶體,從資料安排的角度來講,和陣列極其相似,不同的地方就是 陣列是靜態分配空間,一旦分配了空間的大小,就不可再改變了 而vector是動態分配空間,隨著元素的不斷插入,它會按照自身的一套機制不斷擴充自身...

STL中的序列式容器 vector(向量)

vector 是向量型別,它可以容納許多態別的資料,如若干個整數,所以稱其為容器。vector 是c stl的乙個重要成員,使用它時需要包含標頭檔案 include vector 容器的長度不固定,能夠在程式執行時動態地改變,故也稱動態陣列。有以下方式,舉例說明如下 vector int a vec...