c list 類的模擬實現

2021-09-02 07:37:33 字數 2762 閱讀 4475

list的模擬實現

list的構成

list在底層是一條雙向迴圈鍊錶,可以在常數時間內完成插入和刪除操作。最主要的缺點是無法隨機訪問。而在鍊錶可以將其中元素儲存在不相關的位置。

list的組成

list的本身和list的節點是不同的結構,list本身是由乙個個的節點構成的。所以只需要完成對鍊錶的操作即可。

list的節點類

與c中一樣,每乙個節點都有資料域前後指標,通過乙個類來構造每乙個節點

template//節點類

struct listnode

};

list的迭代器類
list中的迭代器並不與之前的vetcor一樣是原生指標,而是需要我們進行封裝,主要是對於運算子進行過載已達到目的

正向迭代器
templatestruct list_iterator

t& operator*()

t* operator->()

//迭代器的比較

bool operator==(const self& node)

bool operator!=(const self& node)

//迭代器的++

//對於操作運算子++,--的過載,編譯器底層認為有兩個引數的為後置++,乙個引數的為前置++

self operator++() //前置++

self operator++(int) //後置++

//迭代器--

self& operator--() //前置--

self operator--(int) //後置--

};

反向迭代器
反向迭代器,主要是要傳入乙個正向的迭代器,對正向的迭代器進行再次的封裝

templatestruct list_reverse_iterator

ref operator*()

ptr operator->()

//反向迭代器的比較

bool operator==(const self& node)

bool operator!=(const self& node)

//反向迭代器的++

self operator++() //前置++

self operator++(int) //後置++

//迭代器--

self& operator--() //前置--

self operator--(int) //後置--

};

list的構造及容量,插入刪除
template//list類

class list

iterator end()

const_iterator cbegin() const

const_iterator cend() const

//反選迭代器

reverse_iterator rbegin()

reverse_iterator rend()

//建構函式

list() //無參構造

:_hnode(new node)

//帶參構造

list(int size, const value_type& value = value_type() )

:_hnode(new node)

}//拷貝構造

list( list& l)

:_hnode(new node)

}//使用迭代器區間對構造進行初始化

templatelist(inputiterator first, inputiterator last)

}//賦值運算子的過載

list& operator=( list& list)

~list()

//容量

bool empty()

int size()

return count;

}iterator insert(iterator pos, const value_type value)

void push_back(const value_type& value) //尾插

void push_front(const value_type& value) //頭插

void destorynode(node* pl)

iterator erase(iterator pos)

void pop_back()

void pop_front()

void clear();

void remove(const value_type& value);

void unique();

private:

//乙個指向煉表頭節點的指標

node* _hnode;

};}#endif

對list的操作
//清除鍊錶,只保留頭節點

templatevoid mylist::list::clear()

}//刪除所有指定元素

templatevoid mylist::list::remove(const value_type& value)

else it++;}}

//刪除元素,使相鄰元素不重複

templatevoid mylist::list::unique()

}}

模擬實現string類

include using namespace std include class string string string a 2 為什麼要用 優點在哪 string void print string operator const string a string operator const s...

模擬實現日期類

日期類好久沒寫了,重溫一下以前的知識。寫日期類需要注意的有 1 日期減日期的計算 2 關於輸出輸入過載的友元函式宣告 3 建構函式的條件判斷 4 拷貝建構函式的自我賦值判斷 實現 如下 include using namespace std class date else 拷貝建構函式 date c...

模擬實現string類

在c 中,string其實就是將字串封裝起來的類,呼叫類中的成員函式可以完成對類內的字串進行增刪查改,並且將操作符過載,可以更直觀的操作字串,省去了c語言中很多麻煩的操作,有現成的成員函式供我們使用。舉乙個簡單的例子 在c語言中要在一串字串的尾部拼接另乙個字串,我們需要做的事情就是定義兩個字串,要使...