【发布时间】:2023-03-06 09:12:01
【问题描述】:
为什么我可以这样做
vector<int> a;
//...
cout << a.end()-a.begin();
但我不能对 set::iterator 做同样的事情?
【问题讨论】:
-
骗子目标说的是
std::map,但std::set在这方面完全一样。 -
具体来说,
std::vector迭代器是 random access iterators,而对于std::set,它们只是 bidirectional iterators。 -
最终,一旦我们得到 C++20 的
contiguous_iterator,我们就能很好地提出这个问题。恕我直言,幸运的是,您可以在 C++20 之前以定义的方式使用向量执行此操作(或者通过了解更多关于std::vector需要组织自身的方式):减去指针只有在它们指向同一数组中的元素。作为恕我直言重新打开,“重复”更多的是参考。 -
@Bathsheba:这听起来不对,因为没有人在谈论指针。
a.end()-a.begin()对于std::dequeue也有很好的定义,即使它不是连续的。