代码如下:
int B[] = {3,5};
int C[] = {4,5};
cout << std::distance(B,C);
输出为:
-4
谁能解释一下这是为什么?
distance(first, last)
函数告诉您first
和last
处的迭代器之间有多少个项目。请注意,指针是迭代器,具体来说是随机访问迭代器。因此,一个指针与另一个指针之间的距离就是它们的差值,定义为 operator-
。
所以你的问题归结为“
ints
指向的int
和B
指向的int
之间有多少个C
?
distance
尽职尽责地减去指针并告诉你。
技巧是
distance
应该应用于来自同一容器的迭代器。您的代码没有兑现这一承诺。编译器可以随意将 B
和 C
数组放置在任意位置,因此您看到的结果毫无意义。与 C++ 中的许多内容一样,您需要确保正确使用 distance
。如果不这样做,您将得到未定义的行为,其中语言无法保证会发生什么。
std::distance(__first, __last)
旨在推广指针算术,它返回一个值 n
,使得 __first + n = __last
。 int*
的指针,就迭代而言,它们是随机访问的迭代器。该实现仅返回值 __last - __first
: (int*)C - (int*)B
。