向量(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...