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

Ark*_*har 6 c++ stl

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

bool isEnd(set<int> :: iterator itr);
Run Code Online (Sandbox Code Playgroud)

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

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

Yak*_*ont 8

你不。

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

容器也是范围,因此您可以随身携带容器,但通常您不需要完整的容器。

  • @ChiragArora你可以判断一个 **index** 是否指向“过去”的末尾,但不是一个迭代器。 (4认同)
  • 我不得不不同意。例如,在字符串中,您可以使用“string::npos”轻松检查迭代器是否指向结尾,而无需引用原始字符串。 (2认同)

Bas*_*tch 7

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

std::set可以实现为例如红黑树,然后迭代器是内部的节点,您需要整个树来确定该节点是否是最后一个。

  • 实际上,对于像 `std::set` 这样的 rbtree,迭代器是节点指针,而 `end()` 始终是一个指向特殊“非实际数据节点”节点的指针,所以这很容易。有问题的情况是 `std::vector`,其中迭代器只是指向向量数据数组的指针,你需要向量的 `size` 来确定何时到达终点。 (3认同)