例如,如何在没有任何其他信息的情况下实现以下功能?
bool isEnd(set<int> :: iterator itr);
我知道我可以这样做,但如果没有输入变量“s”怎么做?
bool isEnd(const set<int> &s, set<int> :: iterator itr) {
return itr == s.end();
}
答案 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 ;