模擬實現STL中list容器

2021-08-19 02:15:26 字數 2499 閱讀 7964

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...