STL原始碼剖析 一 vector

2021-07-28 04:48:29 字數 2015 閱讀 9052

開始學習 stl原始碼剖析

已經學習了前兩章 有關記憶體管理 以及 迭代器

下面 先嘗試自己寫vector再根據源**進行 修改 以下為**

#ifndef _vector_h

#define _vector_h

#include "alloc.h"

#define _vector_overflow std::cerr<<"vector overflow"public:

~vector()

vector() : start(0),finish(0),end_of_storage(0) {}

iterator begin()

iterator end()

size_type size() const

size_type capacity() const

bool empty() const

reference front()

reference back()

void push_back(const_reference value)

reference operator(size_type n)

return *(start + n);

} void erase(iterator i)

void erase(iterator low, iterator up)

void insert(iterator i, const_reference value)

void insert(iterator i, size_type n, const_reference value)

void resize(size_type n)

void clear() };

#endif // !_vector_h

以下為 借鑑書上**改正的 主要改了以下幾點

1. 資料的 構造 與 析構 的問題

2. 擴充緩衝區大小計算的問題 由原來oldsize的兩倍 改為了  2*(oldsize + needsize)

3. 堅持貫徹左閉右開 將erase改正

4. 由於沒寫 copy  因此 都是用的memcpy  因此 拷貝時 也沒有構造析構的過程

#ifndef _wvector_h

#define _wvector_h

#include "alloc.h"

#include "stl_construct.h"

#define _vector_overflow std::cerr<<"vector overflow"void dellocate()

public:

~vector()

vector() : start(0), finish(0), end_of_storage(0) {}

iterator begin()

iterator end()

size_type size() const

size_type capacity() const

bool empty() const

reference front()

reference back()

void push_back(const_reference value)

reference operator(size_type n)

return *(start + n);

} void erase(iterator i)

void erase(iterator low, iterator up)

void insert(iterator i, const_reference value)

void insert(iterator i, size_type n, const_reference value)

void resize(size_type n)

void clear() };

#endif // !_wvector_h

STL原始碼剖析之vector

向量vector 1.vector概述 vector的資料安排以及操作方式,與array非常相似。兩者的唯一差別在於空間的運用的靈活性。array是靜態空間,一旦配置了就不能改變 vector是動態空間,隨著元素的加入,它的內部機制會自行擴充空間以容納新元素。vector的實現技術,關鍵在於其對大小...

stl原始碼剖析之vector

作者最近在學習c 學習侯捷的stl原始碼剖析這本書,但是我覺得裡面的內容有些古老並且生澀。比如說alloc,對於一些基礎知識不太牢固的同學不是很友好 我建議先細讀第二章前4小節,第一級分配器之後的內容可等基礎足夠再回頭彌補 雖然這本書本就不是面對像菜鳥的c 程式設計師。然一些基礎思想,程式設計方法,...

STL原始碼剖析 容器 vector

vector 常被稱為向量容器,因為該容器擅長在尾部插入或刪除元素,在常量時間內就可以完成,時間複雜度為o 1 而對於在容器頭部或者中部插入或刪除元素,則花費時間要長一些 移動元素需要耗費時間 時間複雜度為線性階o n vector實現的關鍵在於其對大小的控制以及重新配置時的資料移動效率。vecto...