我假设迭代器已经重载了它们的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或其他任何地方找到任何关于迭代器接口包含的信息。
答案 0 :(得分:4)
&#34;为什么不从迭代器中的另一个结果中减去迭代器?&#34;
为什么减去2个指针不会产生另一个指针。
如果有什么我希望它以包含元素为单位返回2个迭代器之间的距离 - 即int
并且快速测试表明它确实返回距离
vector<int> test;
test.push_back(1);
test.push_back(2);
int d = test.begin() - test.end();
cout << d;
return 0;
说:-2