【问题标题】:Operators of std::iteratorstd::iterator 的运算符
【发布时间】: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

标签: c++ stl iterator


【解决方案1】:

“为什么不从另一个结果中减去一个迭代器得到一个迭代器?”

为什么会这样,减去 2 个指针不会得到另一个指针。

如果有什么我希望它以包含的元素为单位返回两个迭代器之间的距离 - 即一个 int

快速测试表明它确实返回了距离

vector<int> test;
test.push_back(1);
  test.push_back(2);
int d = test.begin() - test.end();
cout << d;
return 0;

说:-2

【讨论】:

  • 当将迭代器视为指针时,从另一个中减去一个会返回距离,而不是另一个迭代器/指针。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-20
  • 1970-01-01
  • 2017-04-13
  • 2013-01-29
  • 2019-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多