代码如下:
int B[] = {3,5};
int C[] = {4,5};
cout << distance(B,C);
输出结果为:
-4
任何人都可以解释为什么会这样吗?
答案 0 :(得分:17)
distance(first, last)
函数告诉您first
和last
的迭代器之间有多少项。请注意,指针是迭代器,随机访问迭代器是特定的。因此,一个指针与另一个指针之间的距离是它们的差异,由operator-
定义。
因此,您的问题归结为“ints
所指向的int
与B
指向的int
之间有多少C
?
distance
尽职尽责地减去指针并告诉你。
诀窍是distance
应该应用于来自同一容器的迭代器。您的代码不符合该承诺。编译器可以随意放置B
和C
数组,因此您看到的结果毫无意义。与C ++中的许多内容一样,您可以确保正确使用distance
。如果不这样做,您将得到未定义的行为,语言无法保证会发生什么。
答案 1 :(得分:2)
std::distance(__first, __last)
旨在概括指针算法,它返回值n
,使__first + n = __last
。
对于你的情况,参数是int*
的指针,就迭代而言,它们是随机访问的迭代器。实现只返回__last - __first
的值:简单地(int*)C - (int*)B
。