list是標準模板庫中的乙個容器,實際上是一條帶頭節點的雙向鍊錶。通過與迭代器的組合使用,使得工作效率大大提高。
要注意:迭代器只是為了訪問、修改和遍歷物件,不對空間進行管理。
#pragma once
#include using namespace std;
//定義鍊錶結點結構體
templatestruct __listnode
};//迭代器
templatestruct __listiterator
__listiterator()
{} ref operator*() //解引用的過載
self& operator++() //前置++,像指標一樣可以移動一位
ptr operator->() //過載->
self operator++(int) //後置++
self& operator--()
self operator--(int)
bool operator==(const self& s) const
bool operator!=(const self& s) const
node* _node;
};//模擬實現list
templateclass list
list() //雙向迴圈列表
~list() }
void pushback(const t& d) //後插,學會**復用
void popback() //後刪
erase(--end());
/*node* del = _head->_prev;
node* prev = del->_prev;
_head->_prev = prev;
prev->_next = _head;
delete del;*/
} void pushfront(const t& d) //前插
void popfront() //前刪
else
}//在pos前面進行插入
void insert(iterator pos, const t& d)
//刪除指定位置的結點
iterator erase(iterator& pos) //注意迭代器失效的問題
template void insert(iterator pos, inputiterator first, inputiterator last) //指定位置插入一段區間 }
bool empty() const //判空
iterator begin()
constiterator begin() const
iterator end()
constiterator end() const
private:
node* _head; //指向頭結點的指標
};void printlist(const list& l)
cout << endl;
}
測試:
void testlist()
void testlist1()
stl 模擬實現list
list 是最常用的 stl 庫之一,它的底層就是乙個帶頭的雙向迴圈鍊錶,所以我們在使用時也可以把它想象成這種鍊錶。下面我們模擬實現list。在模擬實現 list 之前,我們首先要明確 list 的迭代器。迭代器的型別有兩種,第一種就是原生態的指標,例如vector的迭代器。第二種就需要我們自己來封...
STL 模擬實現List
list是可以在常數範圍內在任意位置進行插入和刪除的序列式容器,並且該容器可以前後雙向迭代,list的底層是雙向鍊錶結構。如下demo,我們分別用正向迭代器和反向迭代器訪問list元素 int main list int l1 array,array sizeof array sizeof arra...
模擬實現STL中list容器
mylist.h pragma once include reverseiterator.h templatestruct listnode 鍊錶的節點 假如沒有迭代器,而你又沒有提供print函式 即使提供也不一定能滿足使用者的列印需求 如果使用者想列印鍊錶裡面的資料,就必須知道鍊錶的內部結構 即...