Реализация циклического буфера на C++ с использованием 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

В основном я создаю буфер переупорядочивания размером 4 и вызываю doStuff(). Когда я пытаюсь скомпилировать, он говорит о недопустимом использовании выражения void. Я сузил ошибку до моего вызова buffer.pop_front(). Почему он жалуется и как лучше всего поместить deque в мой класс? Спасибо!


person user2921464    schedule 25.10.2013    source источник


Ответы (1)


std::deque::pop_front возвращает void. Вы не можете напечатать это с результатом этой функции. Используйте at() для получения значений, а затем используйте pop_front или pop_back, чтобы просто удалить передний или задний элемент по мере необходимости, но обратите внимание, что они ничего не возвращают.

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

person Sam Cristall    schedule 25.10.2013
comment
Спасибо! Это именно то, что мне нужно было знать. Должен был видеть это раньше. - person user2921464; 26.10.2013