list是stl標準模板庫中的乙個容器,它實質上是乙個帶頭雙向迴圈鍊錶。
這樣的好處是:插入/刪除資料時,不用判斷鍊錶是否為空,並且遍歷的時候找尾也很容易,只需要用_head->_prev就能實現。
迭代器的作用就是為了讓容器的訪問像指標一樣可以實現++,-- ,解引用,->,以及過載 !=,==的比較符。
迭代器有兩種實現方式:
1.原生態指標,如vector
2.將原生態指標進行封裝,因迭代器的使用形式與指標完全相同, 因此,在自定義的類中必須實現以下方法:
1)指標可以解引用,迭代器的類中必須過載operator*()
2)指標可以通過->訪問其所指空間成員,迭代器類中必須過載oprator->()
3)指標可以++向後移動,迭代器類中必須過載operator++()與operator++(int)
4)迭代器需要進行是否相等的比較,因此還需要過載operator==()與operator!=()
模擬實現list ,首先需要構造結點和迭代器,然後建立list鍊錶結構及其相關介面
list.h
#includeusing std::cout;
using std::endl;
namespace ty
}; //建立迭代器
//typedef __listiteratoriterator;
//typedef __listiteratorconst_iterator;
templatestruct __listiterator
__listiterator(node* node)//帶參構造迭代器
:_node(node)
{}ref operator*()
ptr operator->()
//前置++
self& operator++()
//前置--
self& operator--()
//後置++
self operator++(int)
self operator--(int)
bool operator==(const self& self)
bool operator!=(const self& self)
};templateclass list
iterator end()
const_iterator cbegin()const
const_iterator cend()const
list()//建構函式
list(const list& l)
list& operator=(const list& l)
return *this;
} ~list()
void pushback(const t& x)
void popback()
node* tail = _head->_prev;
node* prev = tail->_prev;
prev->_next = _head;
_head->_prev = prev;
delete tail;
} void pushfront(const t& x)
void popfront()
iterator insert(iterator pos, const t& x)
iterator erase(iterator pos)
void swap(list& l)
void clear()
_head->_next = _head;
_head->_prev = _head;
} size_t size()const
return count;
} bool empty()const
t& front()
const t& front()const
t& back()
const t& back()const
private:
node* _head;
};}
注意:list中第乙個元素是_head->_next,end()返回的是_head,但_head並不儲存元素 模擬實現 list
鍊錶前面我已經寫過了,不過寫的是單鏈表,而c 庫中的list是雙鏈表,那麼,我們就來模擬實現一下雙鏈表,這樣對於庫中的list也會有更加深刻的了解。那麼首先我們先來了解一下雙鏈表的結構,雙鏈表無非就是比單鏈表多了一條鏈,單鏈表只有一條指向下乙個節點的鏈,而雙鏈表會多一條指向前乙個節點的鏈。說白了就是...
模擬實現list
構造 介面 插入刪除 交換 清空 include using namespace std list的節點類 template class t struct listnode listnode ppre listnode pnext t val list的迭代器類 template classt,cl...
C 模擬實現List
雙向鍊錶 include includeusing namespace std typedef nodenode templatestruct node t data 鍊錶中的資料 node pnext 下乙個節點 node ppre 前乙個節點 templateclass list templat...