当前位置:网站首页>The use of list and Its Simulation Implementation
The use of list and Its Simulation Implementation
2022-07-07 11:06:00 【Exy-】
One .list iterator Use
int ar[] = { 1,2,3,4,5,6,7,8,9,0 };
int n = sizeof(ar) / sizeof(ar[0]);
//list<int> mylist(10,5);// Two way circular list with leading node
list<int> mylist(ar, ar + n);
for (const auto& e : mylist)
{
cout << e << " ";
}
cout << endl;
list<int>::iterator it = mylist.begin();
while (it != mylist.end())
{
cout << *it << " ";
++it;
}
cout << endl;
list<int>::reverse_iterator rit = mylist.rbegin();
while (rit != mylist.rend())
{
cout << *rit << " ";
++rit;
}
cout << endl;
3.list Iterator failure problem for
Two .list Built in functions for
list<int> mylist;
mylist.empty testing list Is it empty , Is to return true, Otherwise return to false
mylist.size return list Number of valid nodes in
mylist.front return list The reference to the value in the first node of
mylist.back return list Reference to the value of the last node of
3、 ... and .list Simulation Implementation
namespace ljx
{
template<class T>
struct __list_node
{
__list_node<T>* _next;
__list_node<T>* _prev;
T _data;
__list_node(const T& x=T())
:_data(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)
{}
T* operator->()
{
return &_node->_data;
}
T& operator*()
{
return _node->_data;
}
Self& operator++()
{
_node = _node->_next;
return *this;
}
Self& operator++(int)
{
Self tmp(*this);
//_node = _node->_next;
++(*this);
return tmp;
}
Self& operator--()
{
_node = _node->_prev;
return *this;
}
Self& operator--(int)
{
__list_iterator<T>tmp(*this);
--(*this);
return tmp;
}
bool operator!=(const Self& it)
{
return _node != it._node;
}
bool operator==(const Self& it)
{
return _node == it._node;
}
};
template<class T>
class list
{
typedef __list_node<T> node;
public:
typedef __list_iterator<T, T&, T*>iterator;
typedef __list_iterator<T,const T&,const T*> const_iterator;
// Take the lead in two-way circular list
//typedef __list_iterator<T,const T&,const T * > const_iterator;
iterator begin()
{
return iterator(_head->_next);
}
const_iterator begin()const
{
return const_iterator(_head->_next);
}
iterator end()
{
return iterator(_head);
}
const_iterator end()const
{
return const_iterator(_head);
}
list()
{
_head = new node;
_head->_next = _head;
_head->_prev = _head;
}
list(const list<T>& lt)
{
_head = new node;
_head->_next = _head;
_head->_prev = _head;
//const_iterator it = lt.begin();
//while (it != lt.end())
//{
// push_back(*it);
// ++it;
//}
for (auto e : lt)
{
push_back(e);
}
}
//list <T>& operator=(const list<T>& lt)
//{
// if (this != <)
// {
// clear();
// for (auto e : lt)
// {
// push_back(e);
// }
// }
// return *this;
//}
list<T>& operator=(list<T> lt)
{
swap(_head, lt._head)
return *this;
}
~list()
{
clear();
delete _head;
_head = nullptr;
}
void clear()
{
node* p = _head->_next;
while (p != _head)
{
delete(p);
}
}
void push_back(const T& x)
{
//node* tail = _head->_prev;
//node* newnode = new node(x);
//tail->_next = newnode;
//newnode->_prev = tail;
//newnode->_next = _head;
//_head->_prev = newnode;
insert(end(), x);
}
void push_front(const T& x);
void insert(iterator pos, const T& x)
{
node* cur = pos._node;
node* prev = cur->_prev;
node* newnode = new node(x);
prev->_next = newnode;
newnode->_prev = prev;
newnode->_next = cur;
cur->_prev = newnode;
}
void erase(iterator pos)
{
assert(pos != end());
{
node* cur = pos._node;
node* prev = cur->_prev;
node* next = cur->_next;
delete cur;
prev->_next = next;
next->_prev = prev;
}
}
void pop_back()
{
erase(iterator(_head->_prev));
erase(--end());
}
private:
node* _head;
};
}
边栏推荐
- JS implementation chain call
- 2022.7.6DAY598
- SQL Server knowledge collection 11: Constraints
- 【亲测可行】error while loading shared libraries的解决方案
- "Dream Cup" 2017 Jiangsu information and future primary school summer camp it expert PK program design questions
- Opencv installation and environment configuration - vs2017
- 【推薦系統 01】Rechub
- uniCloud
- [recommendation system 02] deepfm, youtubednn, DSSM, MMOE
- Seata 1.3.0 four modes to solve distributed transactions (at, TCC, Saga, XA)
猜你喜欢
1323: [example 6.5] activity selection
Mysql的json格式查询
Find the root of equation ax^2+bx+c=0 (C language)
[untitled]
I plan to take part in security work. How about information security engineers and how to prepare for the soft exam?
Shardingsphere sub database and table examples (logical table, real table, binding table, broadcast table, single table)
软考中级有用吗??
Arduino board description
【STM32】实战3.1—用STM32与TB6600驱动器驱动42步进电机(一)
How much review time does it usually take to take the intermediate soft exam?
随机推荐
Realize ray detection, drag the mouse to move the object and use the pulley to scale the object
Cluster task scheduling system lsf/sge/slurm/pbs based on HPC scenario
P1031 [noip2002 improvement group] average Solitaire
[système recommandé 01] rechub
[recommendation system 02] deepfm, youtubednn, DSSM, MMOE
The eighth training assignment
uniCloud
【OneNote】无法连接到网络,无法同步问题
When initializing 'float', what is the difference between converting to 'float' and adding 'f' as a suffix?
Vscode 尝试在目标目录创建文件时发生一个错误:拒绝访问【已解决】
SQL Server 知识汇集11 : 约束
Applet jump to H5, configure business domain name experience tutorial
软考一般什么时候出成绩呢?在线蹬?
Wallhaven壁纸桌面版
【C#】WinForm运行缩放(变糊)的解决方法
Unable to open kernel device '\.\vmcidev\vmx': operation completed successfully. Reboot after installing vmware workstation? Module "devicepoweron" failed to start. Failed to start the virtual machine
高级软考(网络规划设计师)该如何备考?
[installation system] U disk installation system tutorial, using UltraISO to make U disk startup disk
Deep understanding of Apache Hudi asynchronous indexing mechanism
seata 1.3.0 四種模式解决分布式事務(AT、TCC、SAGA、XA)