2013-10-25 103 views
4

我試圖爲一個賦值實現一個循環緩衝區。爲了節省時間,我想在重排序緩衝區類中使用雙端隊列。這是我第一次嘗試寫一個包含deque的類。使用deque在C++中實現循環緩衝區

#ifndef ROB_H_ 
#define ROB_H_ 

#include <deque> 
#include <cstdio> 

using namespace std; 

class ReorderBuffer{ 
    public: 
     ReorderBuffer (int size); 
     void doStuff(); 

     std::deque<int> buffer; 
};  

ReorderBuffer::ReorderBuffer (int size){ 
    std::deque<int> buffer(size); 
} 

void ReorderBuffer::doStuff(){ 

    std::deque<int> buffer(4); 

    buffer.push_back(5); 
    buffer.push_front(2); 
    buffer.push_back(3); 
    buffer.push_back(4); 
    printf("%d %d\n",buffer.at(0),buffer.pop_front()); 

} 


#endif 

主要,我做了一個大小爲4的重排序緩衝區,並調用doStuff()。當我嘗試編譯時,它說無效使用void表達式。我將這個錯誤縮小到了我的buffer.pop_front()的調用範圍。它爲什麼在抱怨,在我的班級中加入一名Deque的最佳方式是什麼?謝謝!

回答

4

std::deque::pop_front返回void。這個函數的結果不能打印出來。使用at()獲取值,然後使用pop_frontpop_back根據需要簡單地移除前面或後面元素,但請注意,它們不返回任何內容。

http://en.cppreference.com/w/cpp/container/deque/pop_front

+0

謝謝!這正是我需要知道的。早應該看到它。 – user2921464