📅  最后修改于: 2023-12-03 14:59:50.682000             🧑  作者: Mango
在C++中,std::distance
是一个函数,用于返回指向迭代器的两个迭代器之间的距离。它接受两个迭代器参数(起始迭代器和结束迭代器),并返回它们之间的距离。如果迭代器指向的容器为空,则返回0。
template <typename InputIterator>
typename iterator_traits<InputIterator>::difference_type
distance(InputIterator first, InputIterator last);
其中,iterator_traits
是一个模板结构体用于根据迭代器类型获得有关信息,包括该类型的值类型、指向该类型的指针类型、迭代器移动的类型等。difference_type
是两个迭代器之间的距离类型。
以下是一个简单的例子,使用std::distance
计算两个向量之间的距离:
#include <iostream>
#include <vector>
#include <iterator>
int main()
{
std::vector<int> v{ 1, 2, 3, 4, 5 };
auto it = v.begin();
std::advance(it, 2);
std::cout << "Distance: " << std::distance(v.begin(), it) << std::endl;
return 0;
}
上述代码输出为:
Distance: 2
这是因为it
迭代器指向向量v
中的第3个元素,而距离v.begin()
迭代器则为2。
在使用std::distance
时需要注意,如果两个迭代器不属于同一个容器,则行为是未定义的。此外,对于输入迭代器,std::distance
的复杂度为 $O(n)$,其中$n$为两个迭代器之间的距离,因为为了获得距离,需要从第一个迭代器开始逐一向前推进,而这对于输入迭代器而言是唯一可行的方式。对于其他类型的迭代器,如前向迭代器、双向迭代器、随机访问迭代器,std::distance
的复杂度是$O(1)$。