从队列中删除第一个元素?

时间:2012-05-29 19:16:47

标签: c++ data-structures queue

我有一个队列。如果它超过X大小,当我推送一个元素时,我想删除队列的第一个元素。 (将弹出的最后一个元素和第一个元素被推入)

void ClientPlayerManager::queueTableMessage( const std::string& playerName, const std::string& message )
{
    m_tableQ.push(std::make_pair(playerName,message));

    if(m_tableQ.size() > m_maxTableMessages)
    {
        //m_tableQ.pop_back(); does not exist
    }
}

有没有办法用std队列做到这一点?

由于

3 个答案:

答案 0 :(得分:4)

您可以使用std::deque代替std::queuepush_front支持push_backpop_frontpop_backdeque。这也允许随机访问,但您可以忽略它并将deque视为双端队列。 (实际上,{{1}}是双端队列的缩写)。

希望这有帮助!

答案 1 :(得分:0)

如果你想要从pop的对面移除一个元素,只需先跳过它:

if(m_tableQ.size() < m_maxTableMessages) {
    m_tableQ.push(std::make_pair(playerName,message));
}

答案 2 :(得分:0)

Here是另一种方法。使用基于STL的队列实现。