欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > 模拟实现简单list

模拟实现简单list

2025/2/9 14:04:48 来源:https://blog.csdn.net/2302_81226481/article/details/141231351  浏览:    关键词:模拟实现简单list

list在实际中使用也较为广泛,模拟实现其底层可以让我们更加对模版,类和对象等内容更加了解。

#pragma once
#include<iostream>
#include<assert.h>
using namespace std;namespace cls
{template<class T>struct list_node{list_node(const T& x = T()):_data(x),_next(nullptr),_prev(nullptr){}T _data;list_node<T>* _next;list_node<T>* _prev;};template<class T,class Ref,class Ptr>struct list_iterator{typedef list_node<T> Node;typedef list_iterator<T,Ref,Ptr> Self;list_iterator(Node* x):_node(x){}Ref operator*(){return _node->_data;}Ptr operator->(){return &_node->data;}Self& operator++(){_node = _node->_next;return *this;}Self& operator--(){_node = _node->_prev;return *this;}Self operator--(int){Self temp = *this;_node = _node->_prev;return temp;}Self operator++(int){Self temp = *this;_node = _node->_next;return temp;}bool operator==(const Self& x)  const{return _node == x._node;}bool operator!=(const Self& x) const{return _node != x._node;}Node* _node;};template<class T>class list{typedef list_node<T> Node;public:typedef list_iterator<T,T&,T*> iterator;typedef list_iterator<T,const T&,const T*> const_iterator;void empty_init(){_size = 0;_head  = new Node;_head->_next = _head;_head->_prev = _head;}list(){empty_init();}list(const list<T>& x){empty_init();for (const auto& e : x){push_back(e);}}void swap(list<T>& x){std::swap(_size,x._size);std::swap(_head,x._head);}void clear(){iterator it = begin();while (it != end()){it = erase(it);}}list<T>& operator=(list<T> x){swap(x);return *this;}~list(){clear();delete _head;_head = nullptr;}bool empty() const{return  _size == 0;}size_t size() const{return _size;}void push_back(const T& x){Node* newnode = new Node(x);Node* tail = _head->_prev;_head->_prev = newnode;newnode->_next = _head;tail->_next = newnode;newnode->_prev = tail;++_size;}iterator begin(){return _head->_next;}const_iterator begin()  const{return _head->_next; }const_iterator end()  const{return _head;}iterator end(){return _head;}iterator insert(iterator pos,const T& x){Node* newnode = new Node(x);Node* prev = pos._node->_prev;newnode->_next = pos._node;newnode->_prev = prev;prev->_next = newnode;pos._node->_prev = newnode;++_size;return newnode;}void push_front(const T& x){insert(begin(), x);}iterator erase(iterator pos){assert(pos != end());Node* prev = pos._node->_prev;Node* next = pos._node->_next;delete pos._node;prev->_next = next;next->_prev = prev;--_size;return next;}void pop_front(){erase(begin());}void pop_back(){erase(--end());}private:Node* _head;size_t _size;};template<class Container>void print_container(const Container& con){typename Container::const_iterator it = con.begin();while (it != con.end()){   cout << *it << ' ';++it;}cout << endl;for (const auto& e : con){cout << e << ' ';}cout << endl;}void Test(){list<int> lt;lt.push_back(1);lt.push_back(10);lt.push_back(10);lt.push_back(2);lt.push_back(3);lt.erase(lt.begin());print_container(lt);lt.insert(lt.begin(),100);print_container(lt);list<int> lt1 = lt;print_container(lt1);}}

这是一个对于初学者比较友好的简单版本的模拟实现,希望对大家有所帮助。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com