c vector基本實現

2021-09-26 11:51:20 字數 3327 閱讀 7995

#include#include#include#includeusing namespace std;

namespace bit//第乙個元素的位置

iterator end()//最後乙個元素的位置

constiterator cbegin() const

constiterator cend() const

size_t size()

size_t capacity()

vector()

:_start(nullptr)

, _finish(nullptr)

, _endofstorage(nullptr)

{}vector(int n,const t& value=t())

:_start(nullptr)

, _finish(nullptr)

, _endofstorage(nullptr)

}//這裡如果使用iterator做迭代器,就會導致初始化迭代器區間[first,last]只能是vectord 迭代器

//這裡重新宣告迭代器,迭代器區間[first,last]可以是任意容器的迭代器區間

templatevector(inputiterator first,inputiterator last)

}vector( vector&v)

:_start(nullptr)

, _finish(nullptr)

, _endofstorage(nullptr)

size_t xx = v.size();

_finish = _start + xx;

_endofstorage = _start + v.capacity();

} vector& operator=(vectorv)

~vector()

void reserve(size_t n)

}_start = tmp;

_finish = _start + size;

_endofstorage = _start + n;

}} void resize(size_t n,const t& value=t())//const t& value=t()預設引數值

//2.空間不夠則增容

if (n>capacity())

//先擴容然後給值

//3.將size擴大到n

iterator it = _finish;

iterator _finish = _start + n;

while (it != _finish)

}void swap(vector& v)

void pushback(const t&x)

void popback()

iterator insert(iterator pos, const t& x)

//搬移

iterator end = _finish - 1;//此時end為最後乙個元素

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;//指向儲存容量的尾

};}void testvector1()

; bit::vectorfifth(myints, myints + sizeof(myints) / sizeof(int));//陣列轉vector

cout << "the contents of fifth are:"<::iterator it = fifth.begin(); it != fifth.end(); ++it)

cout << endl;

//測試t是string時,拷貝問題

bit::vectorstrv;

strv.pushback("1111");

strv.pushback("2222");

strv.pushback("3333");

strv.pushback("4444");

for (size_t i = 0; i < strv.size();i++)

cout << endl;

}//vector iterator的使用

void printvector(const bit::vector& v)

cout << endl;

}void testvector2()

cout << endl;

//使用迭代器進行修改

it = v.begin();

while (it != v.end())

printvector(v);

}//capacity/vector::reserve/resize

void testvector3()

} //resize

bit::vectormyvector;

//set some inital content:

for (int i = 1; i < 10; i++)

myvector.resize(5);

myvector.resize(8, 100);

myvector.resize(12);

cout << "myvector contains:";

for (size_t i = 0; i < myvector.size(); i++)

cout << "\n";

}void testvector4()

; bit::vectorv(a, a + sizeof(a) / sizeof(int));

//使用find查詢3所在的位置

bit::vector::iterator pos = find(v.begin(), v.end(),3);

//刪除pos位置的資料

v.erase(pos);

//發現可以進行訪問

//因為編寫**的時候進行了處理,返回了pos下乙個元素的值

cout << *pos << endl;

}int main()

基本上是沒有什麼大問題,在reserve上,沒有進行舊空間的釋放,但解決了迭代器失效問題。

c vector 基本用法

include a.push back x x 為插入的資料out coll.erase coll.begin i,coll.begin j 刪除區間 i 1,j coll.erase coll.begin 2,coll.begin 5 刪除區間 3,5 coll.erase coll.begin ...

C vector基本用法

vector 是向量型別,它可以容納許多態別的資料,如若干個整數,所以稱其為容器。可以將其視為能夠存放任意型別的動態陣列。vector 是c stl的乙個重要成員,使用它時需要包含標頭檔案 include 一 vector 的初始化 可以有五種方式,舉例說明如下 1 vectora 10 定義了10...

c vector(模擬實現)

include using namespace std namespace bit public vector start nullptr finish nullptr end of sorage nullptr vector size t n,const t value t start nullp...