通过迭代器浏览模板类中的地图

Browse through a map out of template classes via Iterator

本文关键字:地图 迭代器 浏览      更新时间:2023-10-16

>我正在使用C ++,我遇到了一个问题,即每次从以下代码调用方法"getItem()"都返回0,尽管这不是写在map中的整数,而且map也不是空的。使用"类型名称..."是否有任何问题..."语句作为类属性?

    template <class t>
    class P {
    public:
        P(); 
        int getItem();
    private:
        std::map<int, P<t>* > m;
        typename std::map<int, P<t>* >::iterator it;
        bool visited;
    };
    template <class t>
    P<t>::P() {
      visited=false;
    }
    template <class t>
    int P<t>::getItem()
    {
        if(!visited) 
            it=m.begin();
        int i=it->first;
        it++;
        return i;
    }

方法"getItem()"仅在映射不再发生更改后才会调用。因此,迭代器无效不应该有原因。我通过调用 m[i]=p 将项目添加到地图中。

感谢您的任何帮助;)

你没有设置"visited"布尔值,所以如果你运行一个产生"getItem"的循环,你总是重新初始化迭代器"it"。

由于

您在任何时候都没有将visited设置为 true,因此您始终返回map中第一项的整数,该整数大概是0。你的意思可能是这样的:

if(!visited)
{
    visited = true;
    it=m.begin();
}