如何理解C ++中的std :: distance

时间:2014-10-10 05:43:40

标签: c++

代码如下:

int B[] = {3,5};
int C[] = {4,5};
cout << distance(B,C);

输出结果为:

  

-4

任何人都可以解释为什么会这样吗?

2 个答案:

答案 0 :(得分:17)

distance(first, last)函数告诉您firstlast的迭代器之间有多少项。请注意,指针是迭代器,随机访问迭代器是特定的。因此,一个指针与另一个指针之间的距离是它们的差异,由operator-定义。

因此,您的问题归结为“ints所指向的intB指向的int之间有多少C

distance尽职尽责地减去指针并告诉你。

诀窍是distance应该应用于来自同一容器的迭代器。您的代码不符合该承诺。编译器可以随意放置BC数组,因此您看到的结果毫无意义。与C ++中的许多内容一样,您可以确保正确使用distance。如果不这样做,您将得到未定义的行为,语言无法保证会发生什么。

答案 1 :(得分:2)

std::distance(__first, __last)旨在概括指针算法,它返回值n,使__first + n = __last
对于你的情况,参数是int*的指针,就迭代而言,它们是随机访问的迭代器。实现只返回__last - __first的值:简单地(int*)C - (int*)B