c++ - 为什么 vector::iterator 和 set::iterator 的工作方式不同?
问题描述
为什么我可以这样做
vector<int> a;
//...
cout << a.end()-a.begin();
但是我不能对 set::iterator 做同样的事情?
解决方案
为什么 vector::iterator 和 set::iterator 的工作方式不同?
因为一个容器具有快速随机访问,而另一个则没有。并且因为结果,一个迭代器是随机访问迭代器,而另一个不是。不保证双向迭代器支持减法。
您可以实现std::distance
与所有输入迭代器相同的效果。但是您需要注意,它对于非随机访问迭代器具有线性复杂性。
推荐阅读
- ios - 如果我将 iOS 应用程序从 XCode 发布到我的 iPad,它会在 iPad 中保留多少天?
- list - 过滤 [Maybe a] 并丢弃 Nothing 值
- java - Java 使 FileReader 成为成员变量
- mysql - 当数字偏离平均值时,需要在列中显示正面和负面消息
- angular - Angular 2- ngxDaterangepickerMd 多语言
- javascript - 具有双索引的Javascript数组
- spring-boot - Swagger 3 和 Java >= 9 拼图
- python-3.x - AttributeError:'CallbackContext'('Update')对象没有属性'message'
- javascript - 在javascript中通过引用更改对象
- python - How to filter rows with specified conditions in a dataframe and put them in a new dataframe?