通过Iterator浏览模板类中的地图

时间:2012-06-26 17:56:52

标签: c++ templates iterator

我正在使用c ++,我遇到的问题是,以下代码中方法“getItem()”的每次调用都返回0,尽管这不是地图中写入的整数,并且地图也不是空的。使用“typename ...”语句作为类属性有什么问题吗?

    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。

将项目添加到地图中

感谢您的帮助;)

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

由于您未在任何时候将visited设置为true,因此您总是返回map中第一项的整数0。你可能意味着:

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