#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...