• 欢迎浏览“String me = Creater\忠实的资深Linux玩家;”,请文明浏览,理性发言,有侵犯你的权益请邮件我(creater@vip.qq.com).
  • 把任何的失败都当作一次尝试,不要自卑;把所有的成功都想成是一种幸运,不要自傲。
  •    5年前 (2014-04-07)  C++ 评论关闭  13 
    文章评分 0 次,平均分 0.0

    周末无事,写了个循环队列的dll,一方面考虑到后面项目中需要这个数据结构,另外很久没写程序了,就当练下手。

    这个循环队列采用的是双缓冲,按块复制,相对来说效率还是比较高,先给出头文件:

    #pragma once
    #ifndef CIRCULAR_QUEUE
    #define CIRCULAR_QUEUE
    
    #ifdef DLL_IMPLEMENT
            #define DLL_API __declspec(dllexport)
    #else
            #define DLL_API __declspec(dllimport)
    #endif
    
    #include <string>
    
    class DLL_API CircularQueue
    {
    public:
            CircularQueue(size_t size);
            ~CircularQueue();
    
            /** 写入p开始的n字节,返回true正确,false失败 */
            bool enqueue(const char *p, size_t n);
            /** 读取n字节到dest,返回true正确,false失败 */
            bool dequeue(char *dest, size_t n);
            /** 删除n字节 ,返回true正确,false失败*/
            bool remove(size_t n);
            /** n个字节以字符串形式返回,返回true正确,false失败*/
            std::string readString(size_t n);
    
            /** 循环队列是否空 */
            bool isEmpty() const;
            /** 返回当前有效的数据字节数  */
            size_t getLength() const;
            /** 返回循环队列容量 */
            size_t getCapacity() const;
            /** 返回循环队列空闲字节数 */
            size_t space() const;
            /** 写入到缓冲区的总字节数 */
            unsigned long bytesCounter(bool clear = false);
    
            /** 返回循环队有效区头地址 */
            const char *getStart() const;
    
            /**打印循环队列中有效数据*/
            void printQueueOnlyUsed(bool displayDir) const;
            /**打印循环队列所有数据*/
            void printQueueAll(bool displayDir) const;
    private:
            CircularQueue(const CircularQueue& ) {}
            CircularQueue& operator=(const CircularQueue& ) { return *this; }
            char *buf;
            size_t m_max_size;
            size_t m_used;
            size_t m_head_index;
            size_t m_tail_index;
            unsigned long m_enqueue_count;
    };
    #undef DLL_IMPLEMENT
    #endif

    另外提供头文件和dll的下载地址:

    双缓冲循环队列DLL  双缓冲循环队列 (unknown, 986 hits)

     

    除特别注明外,本站所有文章均为String me = "Creater\忠实的资深Linux玩家";原创,转载请注明出处来自http://unix8.net/home.php/3226.html

    关于
    切换注册

    登录

    忘记密码 ?

    切换登录

    注册

    扫一扫二维码分享