容器vector部分功能的實現

2021-06-18 00:02:00 字數 1764 閱讀 4214

這是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 初始分配空間大小時,分配按實際需求分配...