C++ 在我第一次使用std::distance时可能需要一些清晰度

C++ 在我第一次使用std::distance时可能需要一些清晰度,c++,stl,iterator,C++,Stl,Iterator,我有一个名为“cache”的向量变量(它存储字符串,但我认为这不是必需的信息) 我想找到变量'latest'的最后一个匹配项,当然是一个字符串,在这个向量'cache'中。我使用std::find。由于我希望查找最后一个匹配项而不是第一个匹配项,因此我使用反向迭代器,如下所示: find(cache.rbegin(), cache.rend(), latest) 一切如期而至。现在,我想找到“cache”的第一个元素和这个返回的迭代器之间的距离(“cache”中最后一次出现“latest”的位

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

我想找到变量'latest'的最后一个匹配项,当然是一个字符串,在这个向量'cache'中。我使用std::find。由于我希望查找最后一个匹配项而不是第一个匹配项,因此我使用反向迭代器,如下所示:

find(cache.rbegin(), cache.rend(), latest)
一切如期而至。现在,我想找到“cache”的第一个元素和这个返回的迭代器之间的距离(“cache”中最后一次出现“latest”的位置)

所以我试着:

distance(cache.begin(), find(cache.rbegin(), cache.rend(), latest))
或者,更明显的是:

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

distance(cache.begin(), it)
但是我得到“没有匹配函数来调用‘距离’”


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

这里混合了不同的迭代器类型
它是一个反向迭代器,缓存。begin()返回一个普通迭代器,
distance
不喜欢它。

这里混合了不同的迭代器类型
它是一个反向迭代器,缓存。begin()
返回一个普通迭代器,
distance
不喜欢它。

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

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

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

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

现在,您正试图用一个正向迭代器和一个反向迭代器调用
distance
,但它需要处理两个相同类型的迭代器

要使其工作,您需要获得反向迭代器的“基”,它将是指向同一位置的正向迭代器

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

distance(cache.begin(), it.base());
您还可以使用:

distance(cache.rbegin(), it);

…但这将给出从结尾到找到的项的距离,而不是从开始的距离,因此它将编译,但给出错误的答案。

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

要使其工作,您需要获得反向迭代器的“基”,它将是指向同一位置的正向迭代器

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

distance(cache.begin(), it.base());
您还可以使用:

distance(cache.rbegin(), it);

…但这将给出从结尾到找到的项的距离,而不是从开始的距离,因此它将编译,但给出错误的答案。

是否包含
#并使用正确的命名空间
std::distance
?请注意,您将使用您的方法迭代整个向量。如果您已经知道“cache”的大小,那么在尝试查找目标的同时进行计数,并从大小中进行减法可能会更好。您是否使用正确的名称空间
std::distance
?请注意,您将使用您的方法迭代整个向量。如果您已经知道“缓存”的大小,那么在尝试查找目标的同时进行计数,并从大小中进行减法运算可能会更好。@JerryCoffin不知道。它给出了与
rend
的距离,这是一个开始:)它确实给出了正确的答案,谢谢,也谢谢Jerry Coffin!!我有一种感觉,这可能会以1结尾,但我想这基本上就是@JerryCoffin的评论earlier@JerryCoffin不,没有。它给出了与
rend
的距离,这是一个开始:)它确实给出了正确的答案,谢谢,也谢谢Jerry Coffin!!我有一种感觉,这可能会以1结尾,但我想这基本上就是@JerryCoffin早些时候评论的