2024年最新简易实现 STL--list,2024年最新想学IT的必看

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

	T _val;
	list_node<T>* _next;
	list_node<T>* _prev;

	list_node(const T& x = T())
		:_val(x),
		_next(nullptr),
		_prev(nullptr)
	{}
};
template<class T,class Ref,class Ptr>
struct __list_iterator
{
	typedef list_node<T> Node;
	typedef __list_iterator<T, Ref, Ptr> self;
	Node* _node;
	__list_iterator(Node* node)
		:_node(node)
	{
	}
	self operator++(int)
	{
		self tmp = __list_iterator(_node);
		_node = _node->_next;
		return tmp;
	}
	self operator--(int)
	{
		self tmp = __list_iterator(_node);
		_node = _node->_prev;
		return tmp;
	}
	self& operator++()
	{
		_node = _node->_next;
		return *this;
	}
	self& operator--()
	{
		_node = _node->_prev;
		return *this;
	}
	bool operator==(const self& it)
	{
		return it._node == _node;
	}
	bool operator!=(const self& it)
	{
		return it._node != _node;
	}
	Ref operator*()
	{
		return _node->_val;
	}
	Ptr operator->()
	{
		return &(_node->_val);
	}
}; 

}


## 泛型编程中模板的再理解


过程中学习到的一些模板的知识:如何自己实现一个函数,可以打印不同容器中不同的数据类型?


这是实现 list 的不同数据打印的代码,值得注意的是,在 list<T> 前面加了一个 typename  ,包括前面的模板声明,也用的是 typename 这是为什么呢?


如果不加 typename ,因为 list<T>  就是未实例化的模板,因为类型是不确定的,里面会有好多未确认的类型,并且编译器无法辨别 const\_iterator 是 **内嵌类型** 还是 **静态成员变量(**只有内嵌类型和静态成员变量才能通过类域去访问),编译器就会报错**;**那么前面加一个 typename,就相当于一个给编译器的声明,这是一个内嵌类型(保证编译的时候不会报错),等 list<T> 实例化之后,再去对应的类里找到实例化类型来替换。



template
void print_list(const list& lt)
{
typename list::const_iterator it1 = lt.begin();
while (it1 != lt.end())
{
cout << *it1 << ’ ';
++it1;
}
cout << endl;
for (auto e : lt)
{
cout << e << ’ ';
}
}


当然,也可以改写为一个针对全部容器打印数据的代码,




![img](https://img-blog.csdnimg.cn/img_convert/1aa51d0e95db50b58bc4261ae9326b4f.png)
![img](https://img-blog.csdnimg.cn/img_convert/3e7998ed04fac1a334a8a63d0808f329.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.youkuaiyun.com/topics/618668825)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

8668825)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值