namespace bite
listnode
* _ppre;
listnode
* _pnext;
t _val;};
/*list 的迭代器
迭代器有兩種實現方式,具體應根據容器底層資料結構實現:
1. 原生態指標,比如:vector
2. 將原生態指標進行封裝,因迭代器使用形式與指標完全相同,因此在自定義的類中必須實現以下方法:
1. 指標可以解引用,迭代器的類中必須過載operator*()
2. 指標可以通過->訪問其所指空間成員,迭代器類中必須過載oprator->()
3. 指標可以++向後移動,迭代器類中必須過載operator++()與operator++(int)
至於operator--()/operator--(int)釋放需要過載,根據具體的結構來抉擇,雙向鍊錶可以向前
移動,所以需要過載,如果是forward_list就不需要過載--
4. 迭代器需要進行是否相等的比較,因此還需要過載operator==()與operator!=()
*/template
<
classt,
class
ref,
class
ptr>
class
listiterator
listiterator
(const self& l)
:_pnode
(l._pnode)
t&operator*(
) t*
operator
->()
self&
operator++(
) self operator++(
int)
self&
operator--(
);self&
operator--(
int)
;bool
operator!=(
const self& l)
bool
operator==(
const self& l)
pnode _pnode;};
template
<
class
t>
class
list
list
(int n,
const t& value =t(
))template
<
class
iterator
>
list
(iterator first, iterator last)
}list
(const list
& l)
list
&operator=(
const list l)
~list()
///// list iterator
iterator begin()
iterator end()
const_iterator begin()
const_iterator end()
///// list capacity
size_t size()
const
;bool
empty()
const
;// list access
t&front()
;const t&
front()
const;t&
back()
;const t&
back()
const
;// list modify
void
push_back
(const t& val)
void
pop_back()
void
push_front
(const t& val)
void
pop_front()
// 在pos位置前插入值為val的節點
iterator insert
(iterator pos,
const t& val)
// 刪除pos位置的節點,返回該節點的下乙個位置
iterator erase
(iterator pos)
void
clear()
;void
swap
(list
& l)
;private
:void
createhead()
private
: pnode _phead;};
}
迭代器模擬實現STL中的list
list中的迭代器類似與智慧型指標的作用,它是將指向鍊錶指向結點的指標管理起來。在stl中的list是帶頭結點的雙向迴圈鍊錶,這樣的設計很巧妙,可以讓我們的插入和刪除元素的時候減少一些需要考慮的邊界問題。要模擬實現stl中的list我們首先得模擬實現迭代器,設計成用來管理指向list中結點的指標。因...
C 模擬實現list容器(支援迭代器)
要模擬實現乙個list容器,主要就是相關頭插頭刪尾插尾刪的介面,這些非常常用。另外有乙個點灰常重要!那就是list的迭代器,list的迭代器不能用原生指標去模擬實現,因為鍊錶的迭代器加一是下乙個節點的指標,在記憶體中兩個節點存放的位置並不連續。因為list的迭代器會指向下乙個節點,所以我們建立乙個迭...
模擬實現簡化版List迭代器 嵌入List
1 迭代器 iterators 概念 1 迭代器是一種抽象的設計概念,其定義為 提供一種方法,使他能夠按順序遍歷某個聚合體 容器 所包含的所有元素,但又不需要暴露該容器的內部表現方式。2 迭代器是一種行為類似智慧型指標的物件,而指標最常見的行為就是內 容提領和成員 訪問。因此迭代器最重要的行為就是對...