栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

初级C++:list的迷你实现及模板、迭代器回顾

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

初级C++:list的迷你实现及模板、迭代器回顾

文章目录
  • 前言
  • 节点模板、迭代器模板
  • list模板
  • 容器的交换
  • 迭代器:单向,双向,随机,const
  • G。

  • 本质:双向带头循环链表
前言

注释到家了


  • 实现list(双向带头循环链表)模板需要:
    • 单个节点的类模板,包含成员变量的声明,和初始化
    • 迭代器模板:成为单个节点类型的指针;成员变量的声明,初始化;成员函数++、!=、*迭代器类型对象
节点模板、迭代器模板
  • clear清理到只剩最后一个头节点即可。
namespace mylist
{
                      ---------------节点模板--------------------------------
	/单个节点类模板 T..char ,int
	template
	struct _list_node   / 类名
	{
		  /  类型 _list_node
		_list_node* _next;
		_list_node* _prev;
		T _data; /数据

		/单个节点类的构造函数  单个节点的初始化
		_list_node(const T& x = T())
			:_next(nullptr)
			, _prev(nullptr)
			, _data(x)
	};
           ------------------------------迭代器模板----------------------------- 
	/ 让我迭代器称为你这个类型的指针
	/ 类型包含内置类型int,char等,还包含自定义类型 
	/_list_node 是类名,_list_node才是自定义类型
	/指针封装一下:i am iterator 类,实例化出来是迭代器对象
	template
	struct _list_itreator
	{
		/对节点类型 重命名
		typedef _list_node Node;
		
		/成员变量
		Node* _node; /该节点类型的一个指针

		/迭代器的构造函数,用单个节点类型的指针初始化
		_list_itreator(Node* _node)
			:_node(node)
		{} / 一个迭代器就是一个节点的指针


		/*我迭代器, 为什么要*我,因为我是节点类型的指针
		/想要拿到我迭代器的数据 
		T& operator*()
		{
			return _node->_data;
		}

		/ ++it  拿到下一个位置的迭代器
		_list_itreator& operator++()
		{
			_node = _node->_next;
			return *this;  //this是迭代器的地址
		}
		/_list_itreator  it1,it2
		/ 迭代器 !=,等于成员变量是否相等
		bool operator!=(const _list_itreator& it)
		{
			return _node != it._node;
		}
		
	};
		......
		......

}

list模板

放弃了,自己的迭代器区间构造用不了,const的也用不了,,有浏览的同学可以看看这个
某位大佬的超链接

容器的交换
  • 用容器内部的成员函数 .sawp(),交换的是头指针的值。
  • 库里面的是深拷贝,申请内存,效率太慢
  • strcut 成员默认公有
迭代器:单向,双向,随机,const

单向:只能++,不能–;链表
双向:可以++,也可以–;双向链表,map
随机:可以++,可以–,可以+,可以-;底层是数祖的,string/vector/deque/map
迭代器的本质是内置类型的指针拷贝构造和赋值重载会完成值浅拷贝。
迭代器是算法和容器之间的胶合剂,对让算法对所有容器都有统一的访问方式。

随机的也是双向
const迭代器库函数底层解决方案,通过增加模板参数实现不同的返回值类型
G。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/976863.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号