首页 > 解决方案 > 什么是 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(); 

什么是正确的语法?

标签: c++stliteratorqueue

解决方案


前面成员std::queue根本不返回迭代器,它返回对队列中第一个元素的引用。所以auto只是队列内的类型

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

这会创建元素的副本,但您也可以对该元素进行引用或 const 引用。

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


推荐阅读