4

我正在尝试为分配实现循环缓冲区。为了节省时间,我想在我的重新排序缓冲区类中使用一个双端队列。这是我第一次尝试编写包含双端队列的类。

#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() 的调用。为什么会抱怨,在我的班级中放置双端队列的最佳方法是什么?谢谢!

4

1 回答 1

5

std::deque::pop_front返回void。你不能用这个函数的结果打印它。用于at()获取值,然后根据需要使用pop_frontpop_back简单地删除前面或后面的元素,但请注意它们不返回任何内容。

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

于 2013-10-25T20:28:06.423 回答