【发布时间】:2016-11-03 20:33:10
【问题描述】:
我假设迭代器已经重载了它们的 operator+ 和 operator- 以返回一个迭代器。我还假设迭代器重载了运算符 int(),这使得以下编译:
std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
std::vector<int>::iterator low = std::lower_bound(v.begin(), v.end(), 2);
int i = low - v.begin();
但是当我尝试将结果分配给迭代器而不是 int 时,我得到了一个编译错误:
std::vector<int>::iterator i = low - v.begin();
为什么不从另一个结果中减去一个迭代器得到一个迭代器?
我无法在cplusplus.com/reference 或其他任何地方找到任何关于迭代器接口所包含内容的信息。
【问题讨论】:
-
与其他两个迭代器不同的迭代器的语义是什么?
-
您应该发布编译器错误。此外,如果减去两个迭代器会产生一个迭代器,那么根据您的逻辑,从彼此相减的简单指针(它们被认为视为迭代器)将产生一个指针。但事实并非如此。
-
中有距离函数返回两个迭代器之间的元素个数 -
@user888379 你这么说,我想这没什么意义
-
如果第二个能在第一个工作时工作会更奇怪,因为你不能重载具有相同参数的函数或运算符 lol