如何解决什么是 STL 队列的 C++ 迭代器?
我知道我们不能在 STL 队列中轻松迭代,但我想做这样的事情:
void myFun(Node* root) {
queue<pair<int,Node*>> myQueue;
myQueue.push(make_pair(0,root));
auto it = myQueue.front();
}
这有效,但是,我应该使用什么来代替队列的 auto
关键字?
我们对地图使用这样的东西:
map<int,Node*>::iterator it = myMap.begin();
但是
queue<pair<int,Node*>>::iterator it = myQueue.front();
这不起作用并引发错误:
‘iterator’ is not a member of ‘std::queue<std::pair<int,Node*> >’
queue<pair<int,Node*>>::iterator it = myQueue.front();
正确的语法是什么?
解决方法
std::queue
的 front 成员根本不返回迭代器,它返回对队列中第一个元素的引用。所以 auto
只是队列中的类型
std::pair<int,Node*> it = myQueue.front();
这会生成元素的副本,但您也可以引用该元素或常量引用。
由于没有返回迭代器的 queue
成员函数,您必须查看具有 front
和 pop
调用序列的所有元素。
您应该使用 pair<int,Node*> &
,(可能是 const),因为这就是 front()
返回的内容。没有一个容器(或容器适配器)具有返回迭代器的 front()
方法。
你想完成什么?
,std::queue
不提供对其内部的访问。它的接口是一个队列:你将元素推入其中,然后从其中弹出元素。就这样。如果您需要一个容器来查看其内容,`std::queued 不是合适的选择。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。