因為list時雙向鍊錶,其內部存的不只有資料,還有前後指標,直接解引用會出錯
還有它的物理儲存空間不是連續的,++,–操作是向前/後偏移一定的大小,而下乙個緊挨的物理空間可能是沒有申請的
所以將原生態指標進行封裝,因迭代器使用形式與指標完全相同,因此在自定義的類中必須實現以下方法:
指標可以解引用,迭代器的類中必須過載operator * ()
指標可以通過->訪問其所指空間成員,迭代器類中必須過載oprator->()
指標可以++向後移動,迭代器類中必須過載operator++()與operator++(int)
至於operator–() / operator–(int)釋放需要過載,根據具體的結構來抉擇,雙向鍊錶可
以向前 移動,所以需要過載,如果是forward_list就不需要過載–
迭代器需要進行是否相等的比較,因此還需要過載operator == ()與operator != ()
#include
using namespace std;
//雙向帶頭迴圈鍊錶
template
struct listnode};
/*因為list時雙向鍊錶,其內部存的不只有資料,還有前後指標,直接解引用會出錯
還有它的物理儲存空間不是連續的,++,--操作是向前/後偏移一定的大小,而下乙個緊挨的物理空間可能是沒有申請的
所以將原生態指標進行封裝,因迭代器使用形式與指標完全相同,因此在自定義的類中必須實現以下方法:
1. 指標可以解引用,迭代器的類中必須過載operator * ()
2. 指標可以通過->訪問其所指空間成員,迭代器類中必須過載oprator->()
3. 指標可以++向後移動,迭代器類中必須過載operator++()與operator++(int)
至於operator--() / operator--(int)釋放需要過載,根據具體的結構來抉擇,雙向鍊錶可
以向前 移動,所以需要過載,如果是forward_list就不需要過載--
4. 迭代器需要進行是否相等的比較,因此還需要過載operator == ()與operator != ()*/
template
struct listiterator
//解引用: *iterator ---> 獲取節點value
ref operator*()
// 指標->成員,一般list元素為自定義型別時用
ptr operator->()
// ++: 移動到下乙個元素的位置
self& operator++()
self& operator--()
bool operator!=
(const self& it)
bool operator==
(const self& it)
node* _node;};
template
class list
iterator end()
const_iterator begin()
const
const_iterator end()
const
//建構函式
list()
:_header
(new node)
//插入函式insert
void
insert
(iterator pos,
const t& val)
//刪除會導致迭代器失效
iterator erase
(iterator pos)
return pos;
}void
pushback
(const t& val)
void
pushfront
(const t& val)
void
popback()
void
popfront()
//獲得鍊錶元素個數
size_t size()
const
//析構
~list()
}//清空所有非頭結點函式
void
clear()
//重新構建迴圈結構
_header->_next = _header->_prev = _header;
}list
(const list
& lst)
:_header
(new node)
//現**法
list
& operator=
(list lst)
private:
node* _header;};
//範圍for遍歷鍊錶元素
template
void
printlistfor
(const list
& lst)
cout << endl;
}
C List集合類常用操作 一
所有操作基於以下類 class employees public string name public string city public datetime birthdate list 初始化 list類的新例項,該例項為空並且具有預設初始容量。listemployees new list em...
c list 類的模擬實現
list的模擬實現 list的構成 list在底層是一條雙向迴圈鍊錶,可以在常數時間內完成插入和刪除操作。最主要的缺點是無法隨機訪問。而在鍊錶可以將其中元素儲存在不相關的位置。list的組成 list的本身和list的節點是不同的結構,list本身是由乙個個的節點構成的。所以只需要完成對鍊錶的操作即...
C List 類擴充套件例項及相關問題
靜態類,靜態方法,this關鍵字 擴充套件方法三要素 namespace system.linq return default t program類呼叫 class program new user user user list.getsearchobj u u.name.contains 張 us...