我正在尝试为分配实现循环缓冲区。为了节省时间,我想在我的重新排序缓冲类中使用deque。这是我第一次尝试编写一个包含双端队列的类。
#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
在main中,我创建一个大小为4的重新排序缓冲区并调用doStuff()。当我尝试编译时,它表示无效使用void表达式。我把错误缩小到我对buffer.pop_front()的调用。为什么抱怨,什么是在课堂上放置双性人的最好方法?谢谢!
答案 0 :(得分:4)
std::deque::pop_front
返回void
。您无法使用此功能的结果打印此内容。使用at()
获取值,然后使用pop_front
或pop_back
根据需要删除前面或后面的元素,但请注意它们不会返回任何内容。