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::queue
根本不返回迭代器,它返回对队列中第一个元素的引用。所以auto
只是队列内的类型
std::pair<int, Node*> it = myQueue.front();
这会创建元素的副本,但您也可以对该元素进行引用或 const 引用。
由于没有queue
返回迭代器的成员函数,因此您必须查看所有具有front
andpop
调用序列的元素。
推荐阅读
- c# - SqliteNetExtensions 在调用 InsertOrReplaceWithChildren() 时是否可以忽略指定的孩子?
- c# - 带有 Microsoft.Office.Interop.Word 2016/365 编码和 2010 生产的 Visual Studio 2017 C# 项目
- node.js - Lambda:模块初始化错误:错误
- android - 初始化时出现 Crashlytics 异常
- angular - 获取泛型类型的属性
- javascript - MongoDB 聚合函数不返回使用 JavaScript 加入的集合的值
- python - 使用python扁平化xml
- java - 可选的
当 isPresent() 获取属性时,为 null 时为 null;Java 8 中的函数式风格 - hadoop - 带有 Kerberos 的 Apache Phoenix 查询服务器瘦客户端
- php - 如何在单击相同按钮时更新表数据?