stl 模擬實現vector

2021-09-09 00:27:39 字數 3092 閱讀 9245

對於vector相信大家並不陌生,這裡介紹一些重要的vector的介面和用法。

1. 建構函式

vector(); 無參構造

vector(size_type n, const value_type& val = value_type()); 構造並初始化n個val

vector (inputiterator first, inputiterator last); 利用迭代器進行構造。

2. 拷貝構造

vector (const vector& x);

3. 迭代器的使用

iterator begin(); 獲取第乙個資料位置的 iterator

iterator end(); 獲取最後乙個資料下乙個位置的 iterator

reverse_iterator  rbegin(); 獲取最後乙個資料位置的 reverse_iterator 反向迭代器

reverse_iterator  rend(); 獲取第乙個資料前乙個位置的 reverse_iterator 反向迭代器

const_iterator cbegin(); 獲取第乙個資料位置的 const_iterator

const_iterator cend(); 獲取最後乙個資料的下乙個位置的 const_iterator

關於vector迭代器失效問題:插入操作時有可能導致迭代器失效,因為插入時有可能增容,增容後迭代器還代表原來的空間的位置,而原來的空間已經釋放。刪除時也會導致迭代器失效,刪除操作erase返回的是刪除元素的下乙個位置,其實迭代器指向的空間還在,只是不是我們所期望的了,也就是邏輯上的迭代器失效。

4. 容量空間等介面

size_t size(); 返回有效資料個數

size_t capacity(); 返回容量空間的大小

void resize(size_type n, value_type val = value_type()); 修改有效資料個數,若n 大於有效資料個數則在末尾新增值 val。

void reserve (size_type n); 修改容量大小 vs下預設增長為原來的 1.5 倍。

5. 增刪查改等操作

void push_back (const value_type& val); 尾插

void pop_back(); 尾刪

iterator insert (iterator position, const value_type& val);  在 position 位置前插入資料 value。 插入時有可能增容,增容後position還指向原來的空間,而原來的空間已經釋放了。迭代器失效。

iterator erase (iterator position); 刪除position位置的資料  刪除後,position指向下乙個元素,迭代器失效。

operator (size_type n);  像陣列一樣訪問。

vector 模擬實現

namespace smx

iterator end()

const_iterator cbegin() const

const_iterator cend() const

size_t size() const

size_t capacity() const

vector() :start(nullptr)

, finish(nullptr)

, endofstorage(nullptr)

vector(size_t n, const t& value = t()) :start(nullptr)

, finish(nullptr)

, endofstorage(nullptr)

}/*template*/

vector(iterator first, iterator last)

}vector(const vector& v)

finish = start + v.size();

endofstorage = start + v.capacity();

} vector& operator=(const vector& v)

delete start;

start = tmp;

finish = start + v.size();

endofstorage = start + v.capacity();

}return *this;

} ~vector()

void reserve(size_t n)

}delete start;

start = tmp;

finish = start + _size;

endofstorage = start + n;

}} void resize(size_t n, const t& value = t())

if (n > capacity())

iterator it = finish;

finish = start + n;

while (it != finish)

}void push_back(const t& x)

void pop_back()

iterator insert(iterator pos,const t& x)

iterator _end = finish - 1;

while (_end >= pos)

*pos = x;

++finish;

return pos;

} iterator erase(iterator pos)

--finish;

return pos;

} t& operator(size_t pos)

private:

iterator start;

iterator finish;

iterator endofstorage;

};}

STL模擬實現vector

首先給出所需要實現的函式介面和類的封裝 templateclass vector 接下來給出上面介面的具體的實現,但是其中有 型別萃取,因為需要根據不同的資料型別進行不同的賦值方式,從而提高程式的效率。下面給出所有的實現 和我自己的測試 struct truetype struct falsetyp...

類模板模擬實現STL中Vector

vector 向量 c 中的一種資料結構,確切的說是乙個類.它相當於乙個動態的陣列,當程式設計師無法知道自己需要的陣列的規模多大時,用其來解決問題可以達到最大節約空間的目的.用法 1.變數宣告 例 宣告乙個int向量以替代一維的陣列 vector a 等於宣告了乙個int陣列a,大小沒有指定,可以動...

模擬實現vector

include include using namespace std template class vector 向vector中存入size個元素 vector const t array,size t size start new t size endofstorage start size ...