首页 > 解决方案 > 为什么 vector::iterator 和 set::iterator 的工作方式不同?

问题描述

为什么我可以这样做

vector<int> a;
//...
cout << a.end()-a.begin();

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

标签: c++iterator

解决方案


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

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

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


推荐阅读