順序容器 vector

2021-09-11 18:30:59 字數 2075 閱讀 3046

一、底層實現

vector就是動態陣列.它也是在堆中分配記憶體,元素連續存放,有保留記憶體,如果減少大小後,記憶體也不會釋放.如果新值》當前大小時才會再分配記憶體.

它擁有一段連續的記憶體空間,並且起始位址不變,因此它能非常好的支援隨即訪問,即操作符,但由於它的記憶體空間是連續的,所以在中間進行插入和刪除會造成記憶體塊的拷貝,另外,當該陣列後的記憶體空間不夠時,需要重新申請一塊足夠大的記憶體並進行記憶體的拷貝。這些都大大影響了vector的效率。

對最後元素操作最快(在後面新增刪除最快 ), 此時一般不需要移動記憶體,只有保留記憶體不夠時才需要

對中間和開始處進行新增刪除元素操作需要移動記憶體,如果你的元素是結構或是類,那麼移動的同時還會進行構造和析構操作,所以效能不高 (最好將結構或類的指標放入vector中,而不是結構或類本身,這樣可以避免移動時的構造與析構)。

訪問方面,對任何元素的訪問都是o(1),也就是是常數的,所以vector常用來儲存需要經常進行隨機訪問的內容,並且不需要經常對中間元素進行新增刪除操作.

二、模擬實現(主要實現了個別介面函式和迭代器)

1.myvector.h

#ifndef myvector_h

#define myvector_h

#include#include"myiterator.h"

using namespace std;

templateclass myvector

myvector(const myvector& src) //拷貝建構函式

_arr = new t[src._valsize];

for (int i = 0; i> 1); //採用1.5倍擴容方式

t* p = new t[_len];

for (int i = 0; i<_valsize i>

if (null != _arr)

_arr = p;

}};templatet& myiterator::operator*()

templatet& myiterator::operator->()

#endif;

2.myiterator.h

#ifndef myiterator_h

#define myiterator_h

#includeusing namespace std;

templateclass myvector;

templateclass myiterator

myiterator(const myiterator*src)

myiterator& operator=(const myiterator& src)

bool operator==(const myiterator& src)

bool operator!=(const myiterator& src)

myiterator& operator++() //後置++

myiterator operator++(int)

myiterator& operator--()

myiterator& operator--(int)

t& operator*();

t& operator->();

};#endif;

3.main.cpp

#include"myvector.h"

#includeusing namespace std;

int main()

v1.show();

cout <::iterator it="v1.begin();

for (it; it != v1.end(); it++)

cout << endl;

return 0;

}

三、執行結果

順序容器vector

vector的關鍵在於其對大小的控制以及重新配置時的資料搬移效率。由於vector維護的是乙個連續線性空間,所以不論元素類別,普通指標都可以作為vector的迭代器而滿足必要條件,包括隨機訪問 操作符 等操作行為。vector提供的是random access iterators。typedef v...

順序容器 vector

vector與array非常相似,唯一的區別在於靈活性,陣列是靜態空間,一旦定義就不能改變,變大變小都需要客戶端自己重新配置新的空間,然後將元素從舊址搬到新址,再把原來的空間還給系統。vector是動態空間,隨著元素的加入,他的內部機制會自行擴充空間以容納新元素。1.vector的底層實現 vect...

STL順序容器 vector

vector是乙個線性順序結構。相當於陣列,但其大小可以不預先指定,並且自動擴 展。它可以像陣列一樣被操作,由於它的特性我們完全可以將vector 看作動態數 組。在建立乙個vector 後,它會自動在記憶體中分配一塊連續的記憶體空間進行資料 儲存,初始的空間大小可以預先指定也可以由vector 預...