zoukankan      html  css  js  c++  java
  • c++高级编程12 中

     容器适配器:
     适配器没有提供迭代器
     queue:  size(),empty(),swap(),push(),emplace()
    pop不会返回弹出的元素,通过front()和back()分别获得第一个和最后一个元素的引用
    
    
    #include <iostream>
    #include <queue>
    using namespace std;
     template <typename T>
     class PackBuffer
     {
     public:
         PackBuffer(size_t maxsize = 0);
         bool bufferPacket(const T& packet);
         T getNextPacket() throw(std::out_of_range);
     protected:
         //缓存队列
         std::queue<T> mPackets;
        int mMaxsize;
    };
    
    
    template <typename T>
     PackBuffer<T>::PackBuffer(size_t maxsize)
        :mMaxsize(maxsize)
     {}
     template <typename T>
     bool PackBuffer<T>::bufferPacket(const T& packet)
     {
         if(mMaxsize > 0&&mPackets.size() == mMaxsize)
         {
             return false;
         }
         mPackets.push(packet);
         return true;
     }
     template<typename T>
     T PackBuffer<T>::getNextPacket() throw(std::out_of_range)
     {
         if(mPackets.empty())
         {
             throw std::out_of_range("Buffer is empty");
    
    
         }
         T temp= mPackets.front();
         mPackets.pop();
         return temp;
     }
    
    
     class IPPacket
     {
       public:
         IPPacket(int id):mID(id){}
         int getID()const {return mID;}
     private:
        int mID;
    
    
     };
    
    
     int main()
     {
         PackBuffer<IPPacket>  ipPacket(3);
    
    
         for(int i=0;i<=4;++i)
         {
             if(!ipPacket.bufferPacket(IPPacket(i)))
          cout<<"Packet "<<i <<"dropped (queue is full)"<<endl;
         }
         while(true)
         {
             try
             {
                 IPPacket packet = ipPacket.getNextPacket();
                 cout<<"Process packet"<<packet.getID()<<endl;
    
    
             }catch(const out_of_range)
             {
                 cout<<"Queue is empty"<<endl;
                 break;
    
    
             }
    
    
         }
         return 0;
     }
    
    
     priority_queue  优先队列:push(),pop(), top() 返回头元素的const引用 size() empty() swap()
    
    
    
    
    #include <iostream>
    #include <queue>
    using namespace std;
      class Error
     {
         public:
          Error(int priority,const std::string& errMsg)
              :mPriority(priority),mError(errMsg){}
          int getPriorty() const {return mPriority;}
          std::string getErrorString()const {return mError;}
          friend bool operator <(const Error& lsh,const Error& rsh);
          friend std::ostream& operator <<(std::ostream &os,const Error& err);
      protected:
          //错误号  错误信息
          int mPriority;
          std::string mError;
    
    
    
    
     };
      //return highest priority error
     class ErrorCorrelator
     {
     public:
         ErrorCorrelator(){}
         void addError(const Error& error);
         Error getError() throw(out_of_range);
      protected:
         std::priority_queue<Error> mErrors;
    
    
    
    
     };
     bool operator<(const Error& lhs,const Error& rsh)
     {
         return (lhs.mPriority<rsh.mPriority);
    
    
     }
     ostream& operator<<(ostream &os,const Error &err)
     {
         os<<err.mError<<" "<<err.mPriority<<" "<<err.getErrorString()<<endl;
         return os;
    
    
     }
     void ErrorCorrelator::addError(const Error &error)
     {
         mErrors.push(error);
    
    
     }
     Error ErrorCorrelator::getError() throw(out_of_range)
     {
         if(mErrors.empty())
             throw out_of_range("No element!");
         Error top = mErrors.top();
         mErrors.pop();
         return top;
    
    
     }
    
    
     int main()
     {
         ErrorCorrelator ec;
         ec.addError(Error(3,"unable to read file"));
         ec.addError(Error(1,"Incorrect entry from user"));
         ec.addError(Error(10,"unable to allocate memory"));
    
    
         while(true)
         {
             try{
                   Error e= ec.getError();
                   cout<<e<<endl;
    
    
             }catch(const out_of_range&)
             {
                 cout<<"Finished processing nerror"<<endl;
                 break;
             }
    
    
         }
    return 0;
     }
    
    
    
    
    #include <iostream>
    #include <stack>
    using namespace std;
      class Error
     {
         public:
          Error(int priority,const std::string& errMsg)
              :mPriority(priority),mError(errMsg){}
          int getPriorty() const {return mPriority;}
          std::string getErrorString()const {return mError;}
          friend bool operator <(const Error& lsh,const Error& rsh);
          friend std::ostream& operator <<(std::ostream &os,const Error& err);
      protected:
          //错误号  错误信息
          int mPriority;
          std::string mError;
    
    
    
    
     };
      //return highest priority error
     class ErrorCorrelator
     {
     public:
         ErrorCorrelator(){}
         void addError(const Error& error);
         Error getError() throw(out_of_range);
      protected:
         std::stack<Error> mErrors;
    
    
    
    
     };
     bool operator<(const Error& lhs,const Error& rsh)
     {
         return (lhs.mPriority<rsh.mPriority);
    
    
     }
     ostream& operator<<(ostream &os,const Error &err)
     {
         os<<err.mError<<" "<<err.mPriority<<" "<<err.getErrorString()<<endl;
         return os;
    
    
     }
     void ErrorCorrelator::addError(const Error &error)
     {
         mErrors.push(error);
    
    
     }
     Error ErrorCorrelator::getError() throw(out_of_range)
     {
         if(mErrors.empty())
             throw out_of_range("No element!");
         Error top = mErrors.top();
         mErrors.pop();
         return top;
    
    
     }
    
    
     int main()
     {
         ErrorCorrelator ec;
         ec.addError(Error(3,"unable to read file"));
         ec.addError(Error(1,"Incorrect entry from user"));
         ec.addError(Error(10,"unable to allocate memory"));
    
    
         while(true)
         {
             try{
                   Error e= ec.getError();
                   cout<<e<<endl;
    
    
             }catch(const out_of_range&)
             {
                 cout<<"Finished processing nerror"<<endl;
                 break;
             }
    
    
         }
    return 0;
     }
    */
    
    
    pair工具类
    将两个属性不同的值组合起来  通过frist second 访问这对象
    
    
    
    
    void func(const  map<int,int>& m)
    {
        cout<<m[1]<<endl;   //error  operator没有标记为const
        
    }
    
    
    void func(const map<int,int>& m)
    {
        
        auto iter = m.find(1);
        if(iter!=m.end())
            cout<<iter->second<<endl;
        
    }
    
    
    map迭代器
    map<int,Data> datamap;
    datamap[1] = Data(4);
    datamap[1] = Data(5);
    for(auto iter = datamap.begin();iter!=datamap.end();++iter)
    {
        cout<<iter->second.getVal()<<endl;
        
    }
    
    
    for(auto& p:datamap)
    {
        
        cout<<p.second.getVal()<<endl;
    }
    
    
    
    
    不看了,看了一天,标记一下回头再看  410页
  • 相关阅读:
    python函数应用
    python文件操作
    设计模式大杂烩(24种设计模式的总结以及学习设计模式的几点建议)
    (二十四)解释器模式详解
    (二十三)原型模式详解(clone方法源码的简单剖析)
    (二十二)访问者模式详解(伪动态双分派)
    (二十一)状态模式详解(DOTA版)
    (二十)职责链模式详解(都市异能版)
    (十九)组合模式详解
    (十八)享元模式详解(都市异能版)
  • 原文地址:https://www.cnblogs.com/countryboy666/p/10928288.html
Copyright © 2011-2022 走看看