stl原始碼剖析之vector

2021-07-29 23:13:10 字數 2496 閱讀 9912

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

我標註了我實現的順序,可以借鑑借鑑。。

#ifndef vector_hpp

#define vector_hpp

#include

#include

#include

template

<

typename

t>

class

vector

vector(

intn,

const

t& value)

/*        4             */

void

fill_initialize(

size_type

n,const

t& value)

/*        5             */ //

原本實現在

private

中。放至這裡是便於程式更加易讀性,故放在

public。

iterator

allocate_and_fill(

size_type

n, const

t& value)

/*        6             */

iterator

begin()

iterator

end()

size_type

size()

const

size_type

capacity()

const

const

bool

empty()

const

//還有

front

和back

函式返回相應的值

reference

front()                                  

//注意

是引用型別。下同

reference

back()

/*        7             */ //

寫完第六步的一些零零散散的『配件

』下面進入正題

push&pop

void

push_back(

const

t& x)

else

insert_aux

(finish

, x);                      

//aux

為輔助希臘語為增長

-輔助的意思 }

void

pop_back()

iterator

earse(

iterator

first,

iterator

last)

iterator

earse(

iterator

pos)

void

clear()

/*

*/

void

insert(

iterator

pos,

size_type

n,const

t& x)

else

} else

} }

private:

/*        2             */

iterator

start;                                    

//指向第乙個的迭代器指標

iterator

finish;                                   

//指向第乙個空閒

沒有實參的迭代器指標

iterator

end_of_storage;                           

//指向尾後迭代器的迭代器指標

std::allocator

<

int> data_allocator;

/*        8             */ //

接下來考慮動態陣列記憶體不夠的情況

void

insert_aux(

iterator

position,

const

t& x)                 

//position :安置;

把…放在適當位置

};

STL原始碼剖析之vector

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

STL原始碼剖析 一 vector

開始學習 stl原始碼剖析 已經學習了前兩章 有關記憶體管理 以及 迭代器 下面 先嘗試自己寫vector再根據源 進行 修改 以下為 ifndef vector h define vector h include alloc.h define vector overflow std cerr ve...

STL原始碼剖析 容器 vector

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