我有以下代码,它执行一些迭代器算术操作:
template<class Iterator>
void Foo(Iterator first, Iterator last) {
typedef typename Iterator::value_type Value;
std::vector<Value> vec;
vec.resize(last - first);
// ...
}
(last - first)
的表达式(据我所知)仅适用于随机访问迭代器(例如来自 vector
和 deque
的迭代器)。如何在代码中检查传递的迭代器是否满足此要求?
distance(first, last)
来避免完全进行检查。 - Fred Larsonlast-first
适用于所有随机访问迭代器,包括std::deque::iterator
,它绝对不指向连续的内存。 - Mooing Duck