STL 模擬實現list

2021-07-31 06:48:31 字數 1636 閱讀 9664

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函式 即使提供也不一定能滿足使用者的列印需求 如果使用者想列印鍊錶裡面的資料,就必須知道鍊錶的內部結構 即...