网站页面优化分析,打米传奇手游,网站建设算无形资产吗,外贸网站域名被封1.首先要了解到vs底层的list链表是带头双向循环的链表。
所以首先就要看成员变量 那么就说明我们还需要构造一个Node的结构体#xff0c;#xff08;typedef一下就好了#xff0c;名字不影响#xff09; 现在就可以完成间的push_back函数了。 1.list的iterator
我们之前模…1.首先要了解到vs底层的list链表是带头双向循环的链表。
所以首先就要看成员变量 那么就说明我们还需要构造一个Node的结构体typedef一下就好了名字不影响 现在就可以完成间的push_back函数了。 1.list的iterator
我们之前模拟vector和string的时候就直接typedef T* iterator 但是这个list是双向的迭代器这个可以在C的官网上可以查询的。 其他类型也是可以查询的 因为链表的指针注定是不可以简单的就可以完成的vector是用数组存储的所以指针都是连续的所以我们就必须想别的方法C牛逼的就是如果我们把iterator也封装成一个类/结构体那么我们就可以干我们想的任何事情因为他可以运算符重载所以我们外边看着和vector一样的但是底层是完全不同的。这才是C祖师爷强的地方外面都是vector::iterator/list::iterator 但是底层是天差地别。 2.list的const_iterator
有些人的想法是typedef const _list_iteratorT const_iterator,但是使用的时候Q::listint::const_iterator it l.begin(); ------ 相当于 Q::listint:: const _list_iterator it l.begin()
那么_list_iterator 这个类是不发改变的但是const迭代器期望指向内容是不能修改的这样设计的迭代器本身不能修改。必然是有_node _node-_next。所以这不能和vector一样无脑的typedef的。 更有有说那么久重新设计一个_const_list_iterator的类就好了嘛。但是那就太过冗余了因为里面只有部分的成员函数不一样所以我们就不需要再设计一个类了我们先看看他们两者类有什么区别才能更好的统一。 这里只有返回值是不一样的所以为什么不能将返回值再用一个模板来统一规划一下呢 所以就变成了 3._list_iterator类的再次优化 看一眼这个就知道要重载运算符的- 那就实现呗。 但是他实现的很奇怪 但是如果是const类型怎么办因为它的返回值是const T*, 所以我们就有必要再加一个类模板参数了 4.最后完成代码