代码改变世界

阅读STL源码剖析之list

2014-04-08 21:30  微尘_无名  阅读(148)  评论(0编辑  收藏  举报

首先,以我之愚见,觉得有两个地方可以优化一下,不知对否,有待商榷:

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);
    }
}