STL原始碼之實現乙個簡易的Vector容器

2021-06-26 12:17:50 字數 1529 閱讀 4073

這裡需要的基礎知識主要是類模板和函式模板,以及乙個c++記憶體分配的技術allocator類,它提供可感知型別的記憶體分配,這個類支援乙個抽象介面,以分配記憶體並隨後使用該記憶體儲存物件。

使用allocator類,首先應用allocator類建立乙個allocator物件,然後使用該物件你可以分配記憶體,釋放記憶體,構造你需要的物件,釋放不要的物件。

templateallocatorvector::alloc;這句必須存在,就是生成乙個allocator物件,不過在類定義時就已經實現了。沒有這句在vs2010上會編譯不通過,原因不清楚.

#ifndef myvector_h

#define myvector_h

#include#includeusing namespace std;

templateclass vector

void push_back(const t&);

//返回vector的大小

size_t size()

//返回vector的容量

size_t capacity()

private:

static std::allocatoralloc;//所有的vector都用這個配置器,乙個物件,用來獲取原始的沒有構造物件的記憶體

void reallocate();

t* elements;

t* first_free;

t* end;

};templateallocatorvector::alloc;

//往容器後面加入元素

templatevoid vector::push_back(const t&t)

templatevoid vector::reallocate()

#endif

上面就是完整的vector容器的建立,只提供乙個功能,往容器加入元素,然後我們執行下面的函式來檢查記憶體的占用情況,來檢驗我們是否正確實現了該容器。

#include"test.h"

#includeusing namespace std;

void main()

{ vectora;

cout<<"vector已經空間: "<

輸出結果

vector已經空間: 0

vector總容量: 0

vector容器占用空間:12

請按任意鍵繼續. . .

那麼我們再讓容器 新增乙個元素

vector已經空間: 1

vector總容量: 2

vector容器占用空間:12

請按任意鍵繼續. . .

再讓容器 新增乙個元素

vector已經空間: 2

vector總容量: 2

vector容器占用空間:12

請按任意鍵繼續. . .

再讓容器 新增乙個元素

vector已經空間: 3

vector總容量: 4

vector容器占用空間:12

請按任意鍵繼續. . .

乙個socket原始碼

vc編寫伺服器 式的聊天室 2009 9 11 本文參考了 visual c 6.0完全自學手冊 中的示例 一 流程說明 客戶端客戶端建立流式套接字 呼叫connection向伺服器傳送連線請求 連線成功後使用建立與之關聯的的csocketfile物件和carchive物件 使用carchive物件...

乙個socket原始碼

vc編寫伺服器 式的聊天室 2009 9 11 本文參考了 visual c 6.0完全自學手冊 中的示例 一 流程說明 客戶端客戶端建立流式套接字 呼叫connection向伺服器傳送連線請求 連線成功後使用建立與之關聯的的csocketfile物件和carchive物件 使用carchive物件...

JavaScript之實現乙個簡單的Vue

原文出處 wclimb vue的使用相信大家都很熟練了,使用起來簡單。但是大部分人不知道其內部的原理是怎麼樣的,今天我們就來一起實現乙個簡單的vue 實現之前我們得先看一下object.defineproperty的實現,因為vue主要是通過資料劫持來實現的,通過get set來完成資料的讀取和更新...