为什么 vector::iterator 和 set::iterator 的工作方式不同?

neo*_*neo 2 c++ iterator

为什么我可以这样做

vector<int> a;
//...
cout << a.end()-a.begin();
Run Code Online (Sandbox Code Playgroud)

但是我不能用 set::iterator 做同样的事情吗?

eer*_*ika 5

为什么 vector::iterator 和 set::iterator 的工作方式不同?

因为一个容器具有快速随机访问,而另一个则没有。因为结果,一个迭代器是随机访问迭代器,而另一个不是。双向迭代器不保证支持减法。

您可以实现std::distance与所有输入迭代器相同的效果。但是您需要注意它对于非随机访问迭代器具有线性复杂度。