首先,以我之愚见,觉得有两个地方可以优化一下,不知对否,有待商榷:
1、在list的结点定义中
template<typename T> struct __list_node { typedef void* void_pointer; void_pointer prev; void_pointer next; T data; }
出现的void_pointer是否改为如下更为妥当:
template<typename T> struct __list_node { typedef __list_node<T>* pointer; pointer prev; pointer next; T data; }
这样可以省略后面的大量指针转换操作(link_type与void_pointer)
2、在remove()函数的实现中:
template<class T,class Alloc> void list<T,Alloc>::remove(const T& value) { iterator first=begin(); iterator last=end(); while(first!=last) { iterator next=first; ++next; if(value==*first) erase(first); first=next; } }
改为如下时候更简洁优化:
template<class T,class Alloc> void list<T,Alloc>::remove(const T& value) { iterator first=begin(); iterator last=end(); while(first!=last) { first=erase(first); } }