add const_iterator
This commit is contained in:
@@ -214,6 +214,40 @@ namespace TinySTL{
|
||||
erase(begin(), end());
|
||||
}
|
||||
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>巨
|
||||
if (empty() || head.p->next == tail.p) return;
|
||||
auto curNode = head.p;
|
||||
|
||||
@@ -62,6 +62,7 @@ namespace TinySTL{
|
||||
public:
|
||||
typedef T value_type;
|
||||
typedef Detail::listIterator<T> iterator;
|
||||
typedef Detail::listIterator<const T> const_iterator;
|
||||
typedef reverse_iterator_t<iterator> reverse_iterator;
|
||||
typedef T& reference;
|
||||
typedef size_t size_type;
|
||||
@@ -87,10 +88,12 @@ namespace TinySTL{
|
||||
void push_back(const value_type& val);
|
||||
void pop_back();
|
||||
|
||||
iterator begin(){ return head; }
|
||||
iterator end(){ return tail; }
|
||||
reverse_iterator rbegin(){ return reverse_iterator(tail); }
|
||||
reverse_iterator rend(){ return reverse_iterator(head); }
|
||||
iterator begin();
|
||||
iterator end();
|
||||
const_iterator begin()const;
|
||||
const_iterator end()const;
|
||||
reverse_iterator rbegin();
|
||||
reverse_iterator rend();
|
||||
|
||||
iterator insert(iterator position, 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);
|
||||
template<class InputIterator>
|
||||
void insert_aux(iterator position, InputIterator first, InputIterator last, std::false_type);
|
||||
const_iterator changeIteratorToConstIterator(iterator& it)const;
|
||||
public:
|
||||
template<class T>
|
||||
friend void swap(list<T>& x, list<T>& y);
|
||||
|
||||
Reference in New Issue
Block a user