当前位置:网站首页>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;
};
}边栏推荐
- Rolling puddle Uni_ App (VIII)
- 如何顺利通过下半年的高级系统架构设计师?
- Laya common script commands
- [untitled]
- [recommendation system 02] deepfm, youtubednn, DSSM, MMOE
- When do you usually get grades in the soft exam? Online pedaling?
- Introduction to shell programming
- [pro test feasible] error while loading shared libraries solution
- 从色情直播到直播电商
- uniapp 在onLaunch中跳转页面后,点击事件失效解决方法
猜你喜欢

Still cannot find RPC dispatcher table failed to connect in virtual KD

How to prepare for the advanced soft test (network planning designer)?

【亲测可行】error while loading shared libraries的解决方案

BUUCTF---Reverse---reverse1

Ping tool ICMP message learning

CSAPP bomb lab parsing

【推荐系统 01】Rechub

JSON format query of MySQL

July 10, 2022 "five heart public welfare" activity notice + registration entry (two-dimensional code)

SQL Server 知识汇集9 : 修改数据
随机推荐
Is the gold content of intermediate e-commerce division in the soft exam high?
Mendeley -- a free document management tool that automatically inserts references into papers
Use of dotween
Idea shortcut keys
[untitled]
Opencv installation and environment configuration - vs2017
[STM32] actual combat 3.1 - drive 42 stepper motors with STM32 and tb6600 drivers (I)
Wallhaven壁纸桌面版
[pytorch 07] hands on deep learning chapter_ Preliminaries/ndarray exercises hands-on version
Static semantic check of clang tidy in cicd
【亲测可行】error while loading shared libraries的解决方案
China Southern Airlines pa3.1
1321: [example 6.3] deletion problem (noip1994)
Bookmarking - common website navigation for programmers
1324: [example 6.6] integer interval
uniCloud
Typescript interface inheritance
The fifth training assignment
seata 1.3.0 四種模式解决分布式事務(AT、TCC、SAGA、XA)
Still cannot find RPC dispatcher table failed to connect in virtual KD