這是c++ primer書中的例題。實現了vector容器的部分功能。具體內容在第四版的18.1節。
要考慮到vector的記憶體分配策略。下面分別是用allocator(注釋的部分)和new,delete實現的。
1.allocator
allocate(size_t t);分配原始的未構造記憶體以儲存t個物件
deallocate(p, n);釋放記憶體。
construct(p, t);在p所指向的記憶體裡構造乙個新元素,呼叫拷貝建構函式用t初始化該物件。
destroy(p);執行p所指物件的析構函式。
2.void* operator new(size_t); //分配乙個物件
void* operator new(size_t);//分配乙個陣列
void* operator delete(void*);//釋放乙個物件
void* operator delete(void*);//釋放乙個陣列
上面四個操作是對記憶體分配和釋放的操作。
定位new,建立物件。
#ifndef myvector_h
#define myvector_h
#include #include using namespace std;
template class vector
void push_back(const t&);
iterator begin()
iterator last()
/*調整vector大小,使其能容納n個元素。
如果n小於vector當前大小,則刪除多餘元素。否則,新增採用值初始化的新元素
*/void reserve(const size_t cap);
//調整vector大小,使其能容納n個元素,所有新的元素為t
void resize(const size_t n, const t& t);
//下標操作符
t& operator(const size_t);
const t& operator(const size_t) const;
//返回vector大小
size_t size()
//返回vector容量
size_t capacity()
private:
//static std::allocatoralloc;//object to get raw memory
void reallocate();//get more space and copy existing elements
t* elements;//first element
t* first_free;
t* end;
};//template allocatorvector::alloc;
template void vector::push_back(const t& t)
template void vector::reallocate()
template void vector::reserve(const size_t cap)
template void vector::resize(const size_t n, const t& t) else if (n > size) else
first_free = elements + n;
}template t& vector::operator(const size_t index)
#endif
vector容器部分原始碼實現
stl中vector部分原始碼實現 本次作業要求自己模仿實現stl中vector部分函式 為了檢測記憶體的管理機制是否是像原始碼一樣,額外寫了乙個test類,通過輸出來檢測是否一樣。test 如下 ifndef test h define test h include include class t...
STL中vector部分功能的實現
ifndef vector h define vector h template class vector iterator end const iterator begin const const iterator end const enum 設定乙個列舉來表示最小容量 private int ...
實現vector容器
在c stl中 每一種容器都有其自己對應的迭代器實現。迭代器也成為了演算法和容器之間的橋梁。今天先模擬一下vector 容器,以及對應的迭代器。一 vector實質是可變長的陣列 空間連續 所謂的可變長其實是偽可變長。為了實現可變長,vector的工作實質 1 初始分配空間大小時,分配按實際需求分配...