2

我有一个队列。如果它超过 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
    }
}

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

谢谢

4

3 回答 3

4

您可以使用 astd::deque代替 a std::queue,它支持push_frontpush_backpop_frontpop_back。这也允许在整个过程中进行随机访问,但您可以忽略它并将其视为deque双端队列。(其实deque就是双端队列的缩写)。

希望这可以帮助!

于 2012-05-29T19:19:14.670 回答
0

如果你想从另一端删除一个元素pop,只需跳过一开始就推送它:

if(m_tableQ.size() < m_maxTableMessages) {
    m_tableQ.push(std::make_pair(playerName,message));
}
于 2012-05-29T19:22:27.590 回答
0

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

于 2012-05-29T19:32:14.203 回答