微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

什么是 STL 队列的 C++ 迭代器?

如何解决什么是 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::queuefront 成员根本不返回迭代器,它返回对队列中第一个元素的引用。所以 auto 只是队列中的类型

std::pair<int,Node*> it = myQueue.front();

这会生成元素的副本,但您也可以引用该元素或常量引用。

由于没有返回迭代器的 queue 成员函数,您必须查看具有 frontpop 调用序列的所有元素。

,

您应该使用 pair<int,Node*> &,(可能是 const),因为这就是 front() 返回的内容。没有一个容器(或容器适配器)具有返回迭代器的 front() 方法。

你想完成什么?

,

std::queue 不提供对其内部的访问。它的接口是一个队列:你将元素推入其中,然后从其中弹出元素。就这样。如果您需要一个容器来查看其内容,`std::queued 不是合适的选择。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。