当前位置: 首页 > news >正文

柯城建设局网站贵州省城乡住房和建设厅网站首页

柯城建设局网站,贵州省城乡住房和建设厅网站首页,wordpress2019,无锡市建设局网站联系电话介绍 上一次介绍了list队容器的迭代器模拟#xff0c;这次模拟实现list的简单功能#xff0c;尤其要注意构造函数、析构函数、以及赋值运算符重载的实现。 list容器需要接纳所有类型的数据#xff0c;因此#xff0c;结构设置与迭代器设置同理#xff0c;需要引入结点这次模拟实现list的简单功能尤其要注意构造函数、析构函数、以及赋值运算符重载的实现。 list容器需要接纳所有类型的数据因此结构设置与迭代器设置同理需要引入结点数据。 //结点结构     templateclass T     struct ListNode     {         ListNodeT* _next;         ListNodeT* _last;         T _data;         ListNode(const T x T())             :_next(nullptr)             , _last(nullptr)             , _data(x)         { }     };     //list容器基本元素     templateclass T     class list     {     public:         typedef ListNodeT Node;           typedef _list_iteratorT iterator;     private:         Node* _node;  //此结点为哨兵结点前指头结点后指尾结点里面没有数据     }; 一构造函数 构造函数只需构造“ 哨兵结点 ”即可因为这里使用链式结构存储因此构造函数没有顺序结构那样的逻辑。代码如下 list() {     _node new Node;     _node-_last _node;     _node-_next _node; } 拷贝构造的实现可直接运用赋值运算符这里要注意由于这里的设计设计到动态空间的申请所以实现时需进行深拷贝。 这里我们先实现push_back尾插功能代码如下 //尾插功能 void push_back(const T x T())  {     Node* node new Node;     node-_data x;     node-_next _node;     node-_last _node-_last;     _node-_last-_next node;     _node-_last node; } 下面是赋值运算符和拷贝构造的实现唯一要注意的是在使用赋值运算符前要先确定“ 哨兵结点 ”即普通的构造函数。 //赋值运算符重载 listT operator(listT L) {     Node* node (L._node)-_next;     while (node ! L._node)     {         push_back(node-_data);         node node-_next;     }     return *this; } //拷贝构造函数 list(listT L) {     //哨兵结点的构造     _node new Node;     _node-_last _node;     _node-_next _node;     //赋值运算符的使用     *this L; } 下面进行样例代码测试 void test1() {     listint v1;     v1.push_back(1);     v1.push_back(2);     v1.push_back(3);     v1.push_back(4);     listint v2;     v2 v1;     listint v3(v1);     std::cout List v2: ;     for (auto e : v2)     {         std::cout e  ;     }     std::cout std::endl;     std::cout List v3: ;     for (auto e : v3)     {         std::cout e  ;     }     std::cout std::endl; } 测试数据结果 二析构函数 析构函数的设计只需诼渐释放所有结点即可包括“ 哨兵结点 ”。代码如下 ~list() {     Node* t _node-_next;     while (t ! _node)     {         Node* next t-_next;         delete t;         t next;     }     delete t;    //最后释放哨兵结点     t nullptr; } 三list容器接口 这里实现begin()、end()、push_back(这个接口上面已实现这里不做演示)、pop_back、push_front、pop_front。代码如下 iterator begin()  //获取头结点 {     return _node-_next; } iterator end()  //获取尾结点 {     return _node; } void pop_back()  //尾删 {     assert(_node-_next ! _node);     Node* node _node-_last-_last;     delete _node-_last;     _node-_last node;     node-_next _node; } void push_front(const T x T())  //头插 {     Node* node new Node;     node-_data x;     node-_next _node-_next;     node-_last _node;     _node-_next-_last node;     _node-_next node; } void pop_front()  //头删 {     assert(_node-_next ! _node);     Node* node _node-_next-_next;     delete _node-_next;     _node-_next node;     node-_last _node; } list容器常用功能有clear()、swap()、erase、insert。接口参数与实现如下 void clear() {     Node* t _node-_next;     while (t ! _node)     {         Node* next t-_next;         delete t;         t next;     }     t nullptr; } void swap(listT L) {     std::swap(_node, L._node); } iterator insert(iterator pos, const T x T()) {     Node* node new Node;     node-_data x;     node-_next pos.node;     node-_last (pos.node)-_last;     node-_next-_last node;     node-_last-_next node;     return node; } iterator erase(iterator pos) {     assert(pos.node ! _node);     Node* next (pos.node)-_next;     Node* last (pos.node)-_last;     delete pos.node;     next-_last last;     last-_next next;     return next; } 下面进行样例代码测试 void test2() {     listint v;     v.push_back(1);     v.push_back(2);     v.push_back(3);     v.push_back(4);     v.push_back(5);     listint::iterator it v.begin();     v.insert(it, 9);     v.erase(v.begin());     for (auto e : v)     {         std::cout e  ;     }     std::cout std::endl; } 测试数据结果如下 其它细节逻辑可自行测试这里不再一一演示。 总list容器的模拟实现跟部分容器可能有些难度这里注重要注意类型使用和转换迭代器的模拟以及构造赋值与析构。功能实现的逻辑基本与链式逻辑一样。
http://www.w-s-a.com/news/65328/

相关文章:

  • 做网站配置wordpress 中文api
  • 怎样把网站做的好看县蒙文网站建设汇报
  • 网站的优化什么做广西桂林新闻最新消息
  • 做网站准备什么软件搜索引擎广告推广
  • 网站开发地图板块浮动网页设计与制作的模板
  • 中国建设招聘信息网站昆明做网站建设的公司排名
  • 那些网站可以做自媒体wordpress 分类seo
  • 淮安市盱眙县建设局网站北京西站到八达岭长城最快路线
  • 在线免费网站企业查查官网入口官网
  • 天津网站优化公司哪家专业超融合系统
  • 邹平网站建设公司报价网站建设备案多长时间
  • 三合一网站开发教程wordpress主题汉化中文版
  • 广州网站建设高端全网营销图片
  • 措勤网站建设罗定城乡建设局网站
  • 苏州建网站流程wordpress不显示内容你
  • 网站流量数据golang建设网站
  • 2020电商网站排行榜如何开设网站
  • 绍兴seo网站管理创新的网站建站
  • 做网站需要的图片网站的视频怎么下载
  • 教人做家务的网站滕州网站建设网站行吗
  • 湖北专业的网瘾学校哪家口碑好seo百度百科
  • 保定网站制作软件网页制作工具程
  • o2o网站建设教程计算机培训班培训费用
  • 赤峰网站制作php智能建站系统
  • 做高防鞋 哪个网站能上架net网站开发net网站开发
  • 做网站公司郑州推广计划步骤
  • 网站建设计无形资产外国做美食视频网站
  • 创立一个网站需要什么网推技巧
  • 网站的会员功能怎么做wordpress主题开拓右边栏
  • 做个一般的网站要多少钱nas 建网站