为什么 std::distance 会产生负结果?

问题描述 投票:0回答:2

代码如下:

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

输出为:

-4

谁能解释一下这是为什么?

c++ iterator std
2个回答
33
投票

distance(first, last)
函数告诉您
first
last
处的迭代器之间有多少个项目。请注意,指针是迭代器,具体来说是随机访问迭代器。因此,一个指针与另一个指针之间的距离就是它们的差值,定义为
operator-

所以你的问题归结为“

ints
指向的
int
B
指向的
int
之间有多少个
C

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

技巧是

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


6
投票

std::distance(__first, __last)
旨在推广指针算术,它返回一个值
n
,使得
__first + n = __last

对于您的情况,参数是
int*
的指针,就迭代而言,它们是随机访问的迭代器。该实现仅返回值
__last - __first

简单
(int*)C - (int*)B

© www.soinside.com 2019 - 2024. All rights reserved.