如何比较迭代器?

How exactly iterators are being compared?

#include <iostream>
#include <set>
using namespace std;
int main() {
  set<int> numbers;
  numbers.insert(1);
  auto numbers_find = numbers.find(1);
  auto numbers_end = numbers.end();
  cout<<*numbers_find<<endl;
  cout<<*numbers_end<<endl;
  cout<<(numbers_find==numbers_end?"true":"false")<<endl;
  return 0;
}

在那种情况下输出将是

1
1
false

据我所知,迭代器基本上是指针,但仅适用于 STL 集合的元素。 所以我的问题是——当我们比较两个迭代器时,到底在比较什么,我假设这是某种等同于指针指向的地址。但是,根据指针逻辑,如果两个迭代器指向同一个元素,那么它们相等才有意义。

int a = 5;
int *ptr1 = &a;
int *ptr2 = &a;
cout<<((ptr1==ptr2)?"true":"false")<<endl;

输出

true

P.S。 Link 到上面的代码示例 https://repl.it/@VanyaRyanichev/FrillyPapayawhipMonitor#main.cpp

结束迭代器不指向最后一个元素,它不指向任何东西。您的程序格式错误(具有未定义的行为)。

C++ 将序列表示为 half-open intervals