如何解决我第一次使用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 举报,一经查实,本站将立刻删除。