• 阅读STL源码剖析之list


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

    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);
        }
    }
    
  • 相关阅读:
    API和String
    集合
    类和对象
    多态
    内部类
    继承
    抽象类
    常用API
    包和修饰符
    异常
  • 原文地址:https://www.cnblogs.com/wwblog/p/3652993.html
Copyright © 2020-2023  润新知