如何检查迭代器是否在没有容器的情况下结束?

时间:2013-09-01 04:15:51

标签: c++ stl

例如,如何在没有任何其他信息的情况下实现以下功能?

bool isEnd(set<int> :: iterator itr);

我知道我可以这样做,但如果没有输入变量“s”怎么做?

bool isEnd(const set<int> &s, set<int> :: iterator itr) {
    return itr == s.end();
}

3 个答案:

答案 0 :(得分:3)

你没有。

范围是两个迭代器,当你移动迭代器时,你几乎应该总是在一个范围内工作。

容器也是范围,所以你可以携带容器,但通常你不需要整个容器。

答案 1 :(得分:2)

使用标准C ++库,无法编写它。

std::set可以实现为: red-black trees,然后迭代器是里面的节点,你需要整个树来确定该节点是否是最后一个节点。

答案 2 :(得分:0)

您需要创建第二个在第一个上缓冲的迭代器。换句话说,它总是领先一个元素。通过这种方式,您可以知道它是否在最后。在rought伪代码中,这是:

    Iterator<T> baseIterator;
    T nextElement;

    void init()
        this.nextElement= this.baseIterator.next() ;

    boolean isEnd()
        return this.nextElement == null ;

    T next()
        T result= this.nextElement ;
        this.nextElement= this.baseIterator.next() ;
        return result ;