行业知识
【C++】list模拟实现+反向迭代器
list模拟实现
- list定义
- list用法
- list iterator的使用
- begin() + end()
- rbegin()+rend()
- reverse()
- sort()
- merge()
- unique()
- remove()
- splice()
- list模拟实现
- struct和class的区别
- list三个类模板
- 默认成员函数
- 构造函数
- 拷贝构造函数
- 赋值运算符重载
- 析构函数
- 数据修改操作
- push_back()
- push_front()
- pop_back()
- pop_front()
- swap()
- clear()
- insert()
- erase()
- 容量操作
- size
- empty
- 数据访问操作
- front()
- back()
- 迭代器
- 正向迭代器
- 构造函数
- begin() + end()
- const_iterator begin()/end()const
- operator*()
- operator->()
- operator!=()
- operator==()
- 前置++和后置++
- 前置--和后置--
- 反向迭代器
- 定义
- 构造函数
- rbegin() + rend()
- const_reverse_iterator rbegin()/rend()const
- operator*()
- operator->()
- operator!=()
- operator==()
- 前置++和后置++
- 前置--和后置--
- list���拟实现总代码
铁汁们,今天给大家分享一篇list模拟实现+反向迭代器,来吧,开造⛳️
list定义
list name ;
-
list底层是带头双向循环链表结构,且该容器可以前后双向迭代。
-
双向链表中每个元素存储互不相关的独立节点,在结点中通过指针访问其前一个元素和后一个元素。
-
list允许在任意位置进行插入和删除操作,时间复杂度为O(1),时间效率高。
-
list不支持任意位置的随即访问,若想要访问某个位置,必须从已知的位置(头部或者尾部)迭代到该位置,时间开销为O(n)。
-
list需要额外的空间开销,用来保存每个节点的相关联信息。
-
typename为任意类型,例如:int、char、double、string、vector。
list用法
list iterator的使用
begin() + end()
iterator begin( )、const_iterator begin( )const ;
- 功能:返回第一个元素的位置(迭代器)。
Tips:const_iterator表示对迭代器进行解引用后的值(*it)不能被修改,而迭代器本身(it)可以被修改。const修饰this指针,表示在该成员函数中成员变量不允许被修改,此处const的用法只能用于类中的成员函数。
iterator end( )、const_iterator end( )const ;
- 功能:返回最后一个元素的下一个位置(迭代器)。
rbegin()+rend()
iterator begin( )、const_iterator rbegin( )const ;
- 功能:返回第一个元素的前一个位置(迭代器)。
iterator rend( )、const_iterator rend( )const ;
- 功能:返回第一个元素的位置(迭代器)。
reverse()
void reverse( ) ;
- 功能 : 逆置,将list中元素的顺序进行颠倒 。
sort()
void sort( ) ;
- 功能:排序,默认为升序。模板参数中的默认仿函数为less。
Tips:list中的sort为归并排序,算法库中的sort为快排。
#define _CRT_SECURE_NO_WARNINGS 1#include#includeusing namespace std;int main(){list lt1;lt1.push_back(4);lt1.push_back(1);lt1.push_back(3);lt1.push_back(2); lt1.sort(); for (auto& e : lt1){cout listcout cout listcout cout listcout cout listcout cout cout cout listcout cout cout cout listcout cout cout cout //struct类未用访问限定符修饰的变量为public,在类外指定类域就可以直接进行访问ListNode* _prev; //带头双向循环链表ListNode* _next;T _data;}template //class类未用访问限定符修饰的变量为private,在类外不可以访问public:typedef ListNode typedef ListNodecout cout _head = new Node;_head-_prev = _head;_head-_next = _head;}CreatHead();}CreatHead();for (int i = 0; i _next;prev->_next = next;next->_prev = prev;delete cur; //cur = nullptr;return next; //返回删除节点的下一个节点}//AccessT& front(){return _head->_next->_data;}const T& front()const{return _head->_next->_data;}T& back(){return _head->_prev->_data;}const T& back()const{return _head->_prev->_data;}//Capacitysize_t size()const{size_t count = 0;for (auto const& e : *this){count++;}return count;}bool empty()const{return size() == 0;}Node* _head; //头指针,该指针指向的节点为头节点,不存储任何有效数据//头节点中的_data不能存储后面节点的总个数,原因:若T为char型,数据个数过大,会数据溢出};}铁铁们,list模拟实现+反向迭代器就到此结束啦,若博主有不好的地方,请指正,欢迎铁铁们留言,请动动你们的手给作者点个鼓励吧,你们的鼓励就是我的动力✨
- 功能:排序,默认为升序。模板参数中的默认仿函数为less。
- 功能 : 逆置,将list中元素的顺序进行颠倒 。
- 功能:返回第一个元素的位置(迭代器)。
- 功能:返回第一个元素的前一个位置(迭代器)。
- 功能:返回最后一个元素的下一个位置(迭代器)。
- 功能:返回第一个元素的位置(迭代器)。
-
下一篇:云服务器怎么设置电脑?