mylist.h
#pragma once
#include"reverseiterator.h"
templatestruct listnode //鍊錶的節點
};//假如沒有迭代器,而你又沒有提供print函式(即使提供也不一定能滿足使用者的列印需求)
// 如果使用者想列印鍊錶裡面的資料,就必須知道鍊錶的內部結構(即結點的每個域的名字及作用)
// 這就①增加了使用成本②破壞了封裝性
//所以就產生了迭代器這個東西。
templatestruct listiterator //迭代器就是為了方便訪問容器裡面的資料(迭代器有點像智慧型指標)
//不用寫預設的拷貝建構函式+賦值運算子過載函式,因為迭代器的物件要像普通指標一樣,預設的就已經滿足要求了。
//要能像普通指標一樣能訪問鏈(過載++ -- * -> != ==)
ref operator*()//_data是個普通型別(像指向內建型別的普通指標一樣解引用就得到它指向的資料)
ptr operator->()//假如_data是個自定義型別(eg.是個結構體)(像指向自定義型別的普通指標一樣)
self& operator++()//像普通指標一樣前置自增
self operator++(int)//像普通指標一樣後置自增
self& operator--()//像普通指標一樣前置自減
self operator--(int)//像普通指標一樣後置自減
bool operator != (const self& s)
bool operator == (const self& s) };
//該鍊錶是帶頭雙向迴圈鍊錶
templateclass mylist
//深拷貝構造+賦值運算子過載(要寫,深淺拷貝問題)
//mylist的迭代器的begin和end
iterator begin()//迭代器就是讓它的物件封裝了乙個結點指標
constiterator begin()const//常成員函式:關鍵是編譯器不允許它修改呼叫它的物件的資料成員。
reverseiterator rbegin()//反向迭代器指向的第乙個元素
//const_reverseiterator rbegin()const//反向迭代器指向的第乙個元素
// iterator end()
constiterator end()const//然後常物件只能呼叫常成員函式。
reverseiterator rend()//反向迭代器指向的最後乙個元素
//const_reverseiterator rend()const//反向迭代器指向的最後乙個元素
// //增刪 查改
void pushback(const t& x)
void pushfront(const t& x)
void popback()
void popfront()
void insert(iterator pos,const t& x)//pos就是乙個迭代器的物件,它裡面有乙個結點指標
iterator erase(iterator pos)
iterator erase2(iterator& pos)//改進:解決了迭代器失效的問題
};
myreverseiterator.h
#pragma once
//反向迭代器是通過正向迭代器適配出來的
template//模板引數(iterator是乙個型別)
struct reverseiterator5 //(reverseiterator5是乙個型別)
typename iterator::refence operator*()//型別裡面的型別refence pointer
typename iterator::pointer operator->()
reverseiterator5 operator++()
reverseiterator5 operator--()
bool operator != (reverseiterator5& s)
bool operator == (reverseiterator5& s)
};
test.cpp
#define _crt_secure_no_warnings
#includeusing namespace std;
#include#include#include"mylist.h"
templatevoid printlist(const mylist& l)
cout << endl;
}void testlist()
int main()
STL 模擬實現list
list是標準模板庫中的乙個容器,實際上是一條帶頭節點的雙向鍊錶。通過與迭代器的組合使用,使得工作效率大大提高。要注意 迭代器只是為了訪問 修改和遍歷物件,不對空間進行管理。pragma once include using namespace std 定義鍊錶結點結構體 templatestruc...
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...