📜  C++中的std :: distance(1)

📅  最后修改于: 2023-12-03 14:59:50.682000             🧑  作者: Mango

C++中的std::distance

在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)$。