STL:序列式容器list笔记

版权声明:所有文章版权归属博主个人 https://blog.csdn.net/weixin_41143631/article/details/88670116

前文中vector的迭代器就是指针,list的迭代器稍微不一样,list是循环双向带头结点的链表,平时自己操作单链表还是使用自己forward_list或者自己写一个list吧。

先说使用,再说数据结构。文档在这http://www.cplusplus.com/reference/list/list/

1. begin与end为正向迭代器,对迭代器执行++操作,迭代器向后移动
2. rbegin(end)与rend(begin)为反向迭代器,对迭代器执行++操作,迭代器向前移动
3. cbegin与cend为const的正向迭代器,与begin和end不同的是:该迭代器指向节点中的元素值不能修

4. crbegin与crend为const的反向迭代器,与rbegin和rend不同的是:该迭代器指向节点中的元素值不
能修改。

迭代器访问元素(借助find()函数),提供头和尾2个地方的直接查询。

reference front();

reference back();

还有对应的cosnt引用返回。

数据结构按照LeetCode上那种方式写,实现可以参考我的mylist https://blog.csdn.net/weixin_41143631/article/details/88373893

形式和我大二数据结构课上的list一样,原理也一样,比较长可以点击左侧“在新页面打开博主的github”查看。

template<class T>
struct ListNode
{
	ListNode(const T& val = T())
		: _pPre(nullptr)
		, _pNext(nullptr)
		, _val(val)
	{}
	ListNode<T>* _pPre;
	ListNode<T>* _pNext;
	T _val;
}

操作和mylist差不多,循环双向而已。自己实现稍微麻烦,因为要operator*(),oprator->(),operator++(),operator++(int)等重载,我稍微写了下,贴一下。

T& operator*()
 {
     return _pNode->_val;
 }
T* operator->()
 {
     return &(operator*());
 }

随机访问,迭代器不会因为插入失效,前面数组和list的总结有,就不一一赘述。

猜你喜欢

转载自blog.csdn.net/weixin_41143631/article/details/88670116