我需要遍历std::queue
。 www.cplusplus.com说:
默认情况下,如果用于特定队列类没有指定的容器类,则使用标准容器类模板双端队列。
所以,我可以以某种方式获取到队列的底层双端队列和迭代呢?
我需要遍历std::queue
。 www.cplusplus.com说:
默认情况下,如果用于特定队列类没有指定的容器类,则使用标准容器类模板双端队列。
所以,我可以以某种方式获取到队列的底层双端队列和迭代呢?
如果您需要遍历一个queue
,那么你需要的东西比一个队列多。 标准集装箱适配器的点是提供一种最小接口。 如果你需要做的迭代,以及,为什么不直接使用双端队列(或列表)来代替?
虽然我与其他人同意,直接使用可迭代的容器是首选的解决方案,我想指出的是,C ++标准的保证,以防万一做它自己的解决方案的支持不够,你希望它无论出于何种原因。
也就是说,你可以继承std::queue
,并利用其受保护的成员Container c;
访问begin()和端部(下层容器)(提供了这些方法存在有)。 下面是在VS 2010中的工作和一个例子与ideone测试 :
#include <queue>
#include <deque>
#include <iostream>
template<typename T, typename Container=std::deque<T> >
class iterable_queue : public std::queue<T,Container>
{
public:
typedef typename Container::iterator iterator;
typedef typename Container::const_iterator const_iterator;
iterator begin() { return this->c.begin(); }
iterator end() { return this->c.end(); }
const_iterator begin() const { return this->c.begin(); }
const_iterator end() const { return this->c.end(); }
};
int main() {
iterable_queue<int> int_queue;
for(int i=0; i<10; ++i)
int_queue.push(i);
for(auto it=int_queue.begin(); it!=int_queue.end();++it)
std::cout << *it << "\n";
return 0;
}
你可以在原始队列保存到临时队列。 然后,你只需做你的正常弹出的临时队列要经过原之一,例如:
queue tmp_q = original_q; //copy the original queue to the temporary queue
while (!tmp_q.empty())
{
q_element = tmp_q.front();
std::cout << q_element <<"\n";
tmp_q.pop();
}
最后,该tmp_q将是空的,但是原来的队列不变。
为什么不只是让你想遍历,并删除项目一次一个队列的复印,打印他们为你去吗? 如果你想用的元素做更多您迭代,那么队列是错误的数据结构。
如果您需要遍历队列......队列是不是你所需要的容器。
你为什么选择一个队列?
你为什么不拿,你可以遍历一个容器?
1.如果您选择一个队列,然后你说你想包装容器为“排队”界面: - 前 - 回 - 推 - 流行 - ...
如果你也想迭代,队列有一个不正确的接口。 队列是提供原始容器的受限子集的适配器
队列的定义2.是一个FIFO,并通过定义一个FIFO没有可迭代
我用这样的事情。 不是很复杂的,但应该工作。
queue<int> tem;
while(!q1.empty()) // q1 is your initial queue.
{
int u = q1.front();
// do what you need to do with this value.
q1.pop();
tem.push(u);
}
while(!tem.empty())
{
int u = tem.front();
tem.pop();
q1.push(u); // putting it back in our original queue.
}
它将工作,因为当你突然从Q1的东西,并将其推入TEM,它成为TEM的第一要素。 那么,到底TEM成为Q1的翻版。
总之:没有。
有一劈,使用载体作为垫层容器,所以queue::front
将返回有效的引用,将其转换为指针的迭代,直到<= queue::back
std::queue
是一个容器适配器,您可以指定使用的容器(默认为使用deque
)。 如果您需要在适配超出了功能,那么只使用一个deque
或直接在另一容器中。