如何比较迭代器?
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
#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