#pragma once
#include<iostream>
using namespace std;
#include<vector>
#include<list>
void TestVector()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(6);
v.push_back(5);
for (int i = 0; i < v.size(); ++i)
{
cout << v[i] <<" ";
}
cout << endl;
vector<int>::iterator iter = v.begin();
for (; iter != v.end(); ++iter)
{
cout << *iter << " ";
}
cout << endl;
}
void TestList()
{
list<int> l;//双向循环链表
l.push_back(1);
l.push_back(2);
l.push_back(3);
l.push_back(4);
l.push_back(6);
l.push_back(5);
list<int>::iterator iter = l.begin();
for (; iter != l.end(); ++iter)
{
cout << *iter <<" ";
}
cout << endl;
}
仿库中迭代器的实现:
#pragma once
#include<iostream>
#include<vector>
#include<list>
#include<assert.h>
using namespace std;
template<class T>
struct __ListNode
{
T _data;
__ListNode<T>* _prev;
__ListNode<T>* _next;
__ListNode(const T& x = T())
:_prev(NULL)
, _next(NULL)
, _data(x)
{}
};
template<class T,class Ref,class Ptr>
struct __ListIterator
{
typedef __ListIterator<T, Ref, Ptr> Self;
typedef T ValueType;
typedef Ref Reference;
typedef Ptr Pointer;
__ListNode<T>* _node;
__ListIterator()
{}
__ListIterator(__ListNode<T>* node)
:_node(node)
{}
Reference operator*()
{
return _node->_data;
}
bool operator==(const Self& s)
{
return _node == s._node;
}
bool operator!=(const Self& s)
{
return _node != s._node;
}
Self& operator++()
{
_node = _node->_next;
return *this;
}
Self operator++(int)
{
Self tmp(*this);
_node = _noode->_next;
return tmp;
}
Self& operator--()
{
_node = _noode->_prev;
return *this;
}
Self operator--(int)
{
Self tmp(*this);
_node = _node->_prev;
return tmp;
}
};
template<class T>
class List
{
typedef __ListNode<T> Node;
Node* _head;
public:
typedef __ListIterator<T, T&, T*> Iterator;
typedef __ListIterator<T,const T&,const T*> ConstIterator;
List()
:_head(new Node)
{
_head->_next = _head;
_head->_prev = _head;
}
/*void PushBack(const T& x)
{
Node* tail = _head->_prev;
Node* tmp = new Node(x);
tmp->_next = _head;
_head->_prev = tmp;
tail->_next = tmp;
tmp->_prev = tail;
}*/
void PushBack(const T& x)
{
Insert(End(), x);
}
void PushFront(const T&x)
{
Insert(Begin(), x);
}
void PopBack()
{
Erase(End());
}
void PopFront()
{
Erase(Begin());
}
void Insert(Iterator pos, const T& x)
{
Node* cur = pos._node;
Node* prev = cur->_prev;
Node* tmp = new Node(x);
tmp->_next = cur;
cur->_prev = tmp;
prev->_next = tmp;
tmp->_prev = prev;
}
Iterator Erase(Iterator pos)
{
assert(pos!=End());
Node* prev = pos._node->_prev;
Node* next = pos._node->_next;
Node* del = pos._node;
prev->_next = next;
next->_prev = prev;
delete del;
return Iterator(next);
}
Iterator Begin()
{
return Iterator(_head->_next);
}
Iterator End()
{
return _head;//explicit
//return Iterator(_head);
}
};
void TestSList()
{
List<int> l;
l.PushBack(1);
l.PushBack(2);
l.PushBack(3);
l.PushBack(4);
l.PushBack(5);
List<int>::Iterator iter = l.Begin();
while (iter != l.End())
{
cout << *iter << " ";
++iter;
}
cout << endl;
iter = l.Begin();
while (iter != l.End())
{
List<int>::Iterator tmp = iter;
++tmp;
if (*iter % 2 == 0)
{
l.Erase(iter);
}
iter = tmp;
/*if (*iter % 2 == 0)
{
iter = l.Erase(iter);
}
else
++iter;*/
}
iter = l.Begin();
while (iter != l.End())
{
cout << *iter << " ";
++iter;
}
cout << endl;
}
void TestVector()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(6);
v.push_back(5);
for (int i = 0; i < v.size(); ++i)
{
cout << v[i] <<" ";
}
cout << endl;
vector<int>::iterator iter = v.begin();
for (; iter != v.end(); ++iter)
{
cout << *iter << " ";
}
cout << endl;
}
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。