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

Eul*_*ler 8 c++

代码如下:

int B[] = {3,5};
int C[] = {4,5};
cout << distance(B,C);
Run Code Online (Sandbox Code Playgroud)

输出是:

-4

谁能解释为什么会这样?

Ada*_*dam 24

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

所以,你的问题可以归结为"有多少ints之间是有int指向Bint指向C

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

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

  • 你看一下文档. (7认同)

Pei*_*Zhu 5

std::distance(__first, __last)旨在泛化指针算术,它返回一个值n,使得__first + n = __last
对于您的情况,参数是 的指针int*,就迭代而言,它们是随机访问的迭代器。实现简单地返回一个值__last - __first
simple (int*)C - (int*)B