vector資料結構和陣列非常相似,也稱為單端陣列。
vector與普通陣列區別:
不同之處在於陣列是靜態空間,而vector可以動態擴充套件(所以vector宣告時不用指定大小,只用指定儲存元素的資料型別。)
動態擴充套件並不是在原空間之後續接新空間,而是找更大的記憶體空間,然後將原資料拷貝新空間,並釋放原空間。
vector容器的迭代器是支援隨機訪問的迭代器。
1.vector構造
vector v; //採用模板實現類實現,預設建構函式
vector(v.begin(), v.end()); //將v[begin(), end())區間中的元素拷貝給本身。
vector(n, elem); //建構函式將n個elem拷貝給本身。
vector(const vector &vec); //拷貝建構函式。
eg:
vectorv1; //無參構造
for (int i = 0; i < 10; i++)
vectorv2(v1.begin(), v1.end());
vectorv3(10, 100);
vectorv4(v3);
2.vector賦值
函式原型:
vector& operator=(const vector &vec);//過載等號操作符
assign(beg, end); //將[beg, end)區間中的資料拷貝賦值給本身。
assign(n, elem); //將n個elem拷貝賦值給本身。
vectorv2;
v2 = v1;
vectorv3;
v3.assign(v1.begin(), v1.end());
vectorv4;
v4.assign(10, 100);
vector賦值方式比較簡單,使用operator=,或者assign都可以。
3.vector容器的容量和大小
函式原型:
empty(); //判斷容器是否為空
capacity(); //容器的容量
size(); //返回容器中元素的個數
resize(int num); //重新指定容器的長度為num,若容器變長,則以預設值填充新位置。
//如果容器變短,則末尾超出容器長度的元素被刪除。
resize(int num, elem); //重新指定容器的長度為num,若容器變長,則以elem值填充新位置。
//如果容器變短,則末尾超出容器長度的元素被刪除
4.vector插入和刪除
函式原型:
push_back(ele); //尾部插入元素ele
pop_back(); //刪除最後乙個元素
insert(const_iterator pos, ele); //迭代器指向位置pos插入元素ele
insert(const_iterator pos, int count,ele);//迭代器指向位置pos插入count個元素ele
erase(const_iterator pos); //刪除迭代器指向的元素
erase(const_iterator start, const_iterator end);//刪除迭代器從start到end之間的元素
clear(); //刪除容器中所有元素
5.vector資料訪問
at(int idx); //返回索引idx所指的資料
operator; //返回索引idx所指的資料
front(); //返回容器中第乙個資料元素
back(); //返回容器中最後乙個資料元素
6.其他
swap(vec); // 將vec與本身的元素互換 eg: v1.swap(v2);
reserve(int len);//容器預留len個元素長度,預留位置不初始化,元素不可訪問。
swap可用於收縮記憶體。
reserve可減少vector在動態擴充套件容量時的擴充套件次數,增加執行效率。
資料結構C Vector
資料結構剛開篇就是一種最基礎的儲存結構線性結構,線性結構中每乙個結點都只有乙個前驅後繼 除去首尾 線性結構是邏輯上連續的儲存結構 物理空間上連續儲存的線性結構可以是陣列,動態陣列等 物理空間不連續的線性結構是鍊錶 c stl中的vector 動態陣列 就是乙個線性結構 1.vector 成員的宣告和...
C vector底層資料結構
vector 其底層資料結構是陣列,由於陣列的特點,vector也具有以下特性 1 o 1 時間的快速訪問 2 順序儲存,所以插入到非尾結點位置所需時間複雜度為o n 刪除也一樣 3 擴容規則 當我們新建乙個vector的時候,會首先分配給他一片連續的記憶體空間,如std vector vec,當通...
C vector容器vector資料訪問
c vector容器vector資料訪問 功能描述 函式原型 include include using namespace std void test for int i 0 i size i cout endl for int i 0 i v1.size i cout endl cout v1的...