C ++ Deque / Vector Выталкивание элементов впереди вместо push_back - PullRequest
0 голосов
/ 09 октября 2011

Я пытаюсь создать класс читателя, который получит первый элемент, оценит его и затем удалит. Таким образом, это означает, что элементы должны быть добавлены спереди, а не сзади.

Это то, что мне нужно сделать. Псевдо-код.

void Add( int messageCode ){ if(m_pList && messageCode!=0xFF)m_pList->push_front(messageCode);  } // Adding a message; Added check if input is 0xFF.

вместо

void Add( int messageCode ){ if(m_pList && messageCode!=0xFF)m_pList->push_back(messageCode);  } // Adding a message; Added check if input is 0xFF.

Ответы [ 3 ]

4 голосов
/ 09 октября 2011

Если вам нужен FIFO, взгляните на класс std::deque и его методы, такие как push_front или emplace_front.

Если вам нужен LIFO, взгляните на std::stack класс.

1 голос
/ 09 октября 2011

Две вещи.

std::deque имеет функцию push_front.Он также имеет функцию pop_front, чтобы удалить его.Действительно, быстрая вставка / удаление спереди - это половина точки deque.

Другое дело в следующем: почему вы хотите толкать / выталкивать спереди?Что-то не так с нажатием / выскочить назад?Вы можете использовать std::vector как обычный стек, просто используя push_back, pop_back и back.Это было бы в значительной степени идентично продвижению вперед.Если у вас нет необходимости каким-либо образом получать доступ к внешним элементам, это кажется вполне законным способом решения этой проблемы.

0 голосов
/ 09 октября 2011

Поскольку у очереди есть push_front, я думаю, что вы заинтересованы в решении с учетом вектора, упомянутого в вашей теме.Вы можете использовать функцию insert , которая также доступна в очереди .Но, как упоминалось в API, это может быть неэффективно.Для удаления этого элемента вы также можете использовать функцию стирания, также предоставляемую обоими.

...