作者最近在學習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...