微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我第一次使用std :: distance

如何解决我第一次使用std :: distance

我有一个名为“ cache”的矢量变量(用于存储字符串,但我认为这不是必需的信息)。

我想找到向量'cache'中最后一次出现的变量'latest',当然是字符串。我使用std :: find。由于我想查找最后一次而不是第一次出现,因此我使用了反向迭代器,如下所示:

find(cache.rbegin(),cache.rend(),latest)

返回预期。现在,我想查找“缓存”的第一个元素与此返回的迭代器之间的距离(“缓存”中最后一次出现“最新”的点)。

所以我尝试:

distance(cache.begin(),find(cache.rbegin(),latest))

或更明显的是:

auto it = find(cache.rbegin(),latest)

distance(cache.begin(),it)

但是我得到“没有匹配功能调用'距离'。”

我知道这很简单,但是我已经搜索了大约一个小时,所以我来到了这里。任何信息,将不胜感激。不知道我在做什么错。

解决方法

您正在尝试计算反向迭代器与常规迭代器之间的距离。 std::distance的两个参数的类型必须相同。尝试以下方法:

size_t dist_from_begin =
    std::distance(find(cache.rbegin(),cache.rend(),latest),cache.rend());
,

现在,您正尝试使用一个正向迭代器和一个反向迭代器调用distance,但是它希望处理两个相同类型的迭代器。

要使其正常工作,您需要获取反向迭代器的“基础”,它将是到相同位置的正向迭代器。

auto it = find(cache.rbegin(),latest)

distance(cache.begin(),it.base());

您还可以使用:

distance(cache.rbegin(),it);

...但是这将为您提供从末端到找到的项的距离,而不是从起点到开始的距离,因此它将编译,但给出错误的答案。

,

您在这里混合使用不同的迭代器类型。 it是反向迭代器,而cache.begin()返回普通迭代器,distance不喜欢这样。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。