add const_iterator
This commit is contained in:
@@ -214,6 +214,40 @@ namespace TinySTL{
|
|||||||
erase(begin(), end());
|
erase(begin(), end());
|
||||||
}
|
}
|
||||||
template<class T>
|
template<class T>
|
||||||
|
typename list<T>::iterator list<T>::begin(){
|
||||||
|
return head;
|
||||||
|
}
|
||||||
|
template<class T>
|
||||||
|
typename list<T>::iterator list<T>::end(){
|
||||||
|
return tail;
|
||||||
|
}
|
||||||
|
template<class T>
|
||||||
|
typename list<T>::const_iterator list<T>::changeIteratorToConstIterator(iterator& it)const{
|
||||||
|
using nodeP = Detail::node<const T>*;
|
||||||
|
auto temp = (list<const T>*const)this;
|
||||||
|
auto ptr = it.p;
|
||||||
|
Detail::node<const T> node(ptr->data, (nodeP)(ptr->prev), (nodeP)(ptr->next), temp);
|
||||||
|
return const_iterator(&node);
|
||||||
|
}
|
||||||
|
template<class T>
|
||||||
|
typename list<T>::const_iterator list<T>::begin()const{
|
||||||
|
auto temp = (list*const)this;
|
||||||
|
return changeIteratorToConstIterator(temp->head);
|
||||||
|
}
|
||||||
|
template<class T>
|
||||||
|
typename list<T>::const_iterator list<T>::end()const{
|
||||||
|
auto temp = (list*const)this;
|
||||||
|
return changeIteratorToConstIterator(temp->tail);
|
||||||
|
}
|
||||||
|
template<class T>
|
||||||
|
typename list<T>::reverse_iterator list<T>::rbegin(){
|
||||||
|
return reverse_iterator(tail);
|
||||||
|
}
|
||||||
|
template<class T>
|
||||||
|
typename list<T>::reverse_iterator list<T>::rend(){
|
||||||
|
return reverse_iterator(head);
|
||||||
|
}
|
||||||
|
template<class T>
|
||||||
void list<T>::reverse(){//<2F><><EFBFBD><EFBFBD>β<EFBFBD>巨
|
void list<T>::reverse(){//<2F><><EFBFBD><EFBFBD>β<EFBFBD>巨
|
||||||
if (empty() || head.p->next == tail.p) return;
|
if (empty() || head.p->next == tail.p) return;
|
||||||
auto curNode = head.p;
|
auto curNode = head.p;
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ namespace TinySTL{
|
|||||||
public:
|
public:
|
||||||
typedef T value_type;
|
typedef T value_type;
|
||||||
typedef Detail::listIterator<T> iterator;
|
typedef Detail::listIterator<T> iterator;
|
||||||
|
typedef Detail::listIterator<const T> const_iterator;
|
||||||
typedef reverse_iterator_t<iterator> reverse_iterator;
|
typedef reverse_iterator_t<iterator> reverse_iterator;
|
||||||
typedef T& reference;
|
typedef T& reference;
|
||||||
typedef size_t size_type;
|
typedef size_t size_type;
|
||||||
@@ -87,10 +88,12 @@ namespace TinySTL{
|
|||||||
void push_back(const value_type& val);
|
void push_back(const value_type& val);
|
||||||
void pop_back();
|
void pop_back();
|
||||||
|
|
||||||
iterator begin(){ return head; }
|
iterator begin();
|
||||||
iterator end(){ return tail; }
|
iterator end();
|
||||||
reverse_iterator rbegin(){ return reverse_iterator(tail); }
|
const_iterator begin()const;
|
||||||
reverse_iterator rend(){ return reverse_iterator(head); }
|
const_iterator end()const;
|
||||||
|
reverse_iterator rbegin();
|
||||||
|
reverse_iterator rend();
|
||||||
|
|
||||||
iterator insert(iterator position, const value_type& val);
|
iterator insert(iterator position, const value_type& val);
|
||||||
void insert(iterator position, size_type n, const value_type& val);
|
void insert(iterator position, size_type n, const value_type& val);
|
||||||
@@ -125,6 +128,7 @@ namespace TinySTL{
|
|||||||
void insert_aux(iterator position, size_type n, const T& val, std::true_type);
|
void insert_aux(iterator position, size_type n, const T& val, std::true_type);
|
||||||
template<class InputIterator>
|
template<class InputIterator>
|
||||||
void insert_aux(iterator position, InputIterator first, InputIterator last, std::false_type);
|
void insert_aux(iterator position, InputIterator first, InputIterator last, std::false_type);
|
||||||
|
const_iterator changeIteratorToConstIterator(iterator& it)const;
|
||||||
public:
|
public:
|
||||||
template<class T>
|
template<class T>
|
||||||
friend void swap(list<T>& x, list<T>& y);
|
friend void swap(list<T>& x, list<T>& y);
|
||||||
|
|||||||
Reference in New Issue
Block a user