Deque迭代程序错误

Deque Iterator Error

本文关键字:错误 程序 迭代 Deque      更新时间:2023-10-16

我有一个用于二进制搜索树实现的BinNode<Elem>类。

当我初始化以下内容时:deque< BinNode<Elem>* >::const_iterator iter = n.begin();我收到一个错误,告诉我deque<>之后应该有冒号。

deque是否不支持模板参数中的模板参数,或者这是某种不同的错误?

下面是函数的一个片段:

template <class Key, class Elem, class KEComp, class EEComp>
void BST<Key, Elem, KEComp, EEComp>::
printBranchesHelp(int branchLen, int nodeSpaceLen, int startLen, int nodesInThisLevel, const deque< BinNode<Elem>* >& n, ostream& out)
{
    deque< BinNode<Elem>* >::const_iterator iter = n.begin();
    for (int i = 0; i < nodesInThisLevel / 2; i++) 
    {  
        out << ((i == 0) ? setw(startLen-1) : setw(nodeSpaceLen-2)) << "" << ((*iter++) ? "/" : " ");
        out << setw(2*branchLen+2) << "" << ((*iter++) ? "\" : " ");
    }
    out << endl;
}  

由于deque< BinNode<Elem>* >::const_iterator是一个依赖名称,因此需要使用typename关键字显式地将其标识为类型:

typename deque< BinNode<Elem>* >::const_iterator iter = n.begin();

您可能想看看这个问题,以更好地理解从属名称以及为什么需要使用typename

如果你发现自己经常需要这种类型,我建议你为它写一个别名或typedef:

using deque_iterator = typename deque< BinNode<Elem>* >::const_iterator;

或者在C++11中,您可以回避这个问题,使用auto:

auto iter = n.begin();