提交 29926270 编写于 作者: 邹晓航

add const_iterator

上级 1ea39ba1
......@@ -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(){//β巨
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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册