對於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 ...