我有一个队列。如果它超过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队列做到这一点?
由于
答案 0 :(得分:4)
您可以使用std::deque
代替std::queue
,push_front
支持push_back
,pop_front
,pop_back
和deque
。这也允许随机访问,但您可以忽略它并将deque
视为双端队列。 (实际上,{{1}}是双端队列的缩写)。
希望这有帮助!
答案 1 :(得分:0)
如果你想要从pop
的对面移除一个元素,只需先跳过它:
if(m_tableQ.size() < m_maxTableMessages) {
m_tableQ.push(std::make_pair(playerName,message));
}
答案 2 :(得分:0)
Here是另一种方法。使用基于STL的队列实现。