use*_*464 4 c++ circular-buffer
我正在尝试为作业实现一个循环缓冲区。为了节省时间,我想在重新排序缓冲区类中使用双端队列。这是我第一次尝试编写一个包含双端队列的类。
#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
Run Code Online (Sandbox Code Playgroud)
在 main 中,我创建了一个大小为 4 的重新排序缓冲区并调用 doStuff()。当我尝试编译时,它说无效使用 void 表达式。我已将错误范围缩小到我对 buffer.pop_front() 的调用。为什么它会抱怨,在我的班级中放置双端队列的最佳方法是什么?谢谢!
std::deque::pop_front返回void。您无法使用此函数的结果打印此结果。使用at()来获取值,然后使用pop_front或pop_back根据需要简单地删除前面或后面的元素,但请注意,它们不会返回任何内容。
http://en.cppreference.com/w/cpp/container/deque/pop_front