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語言中要在一串字串的尾部拼接另乙個字串,我們需要做的事情就是定義兩個字串,要使...