gpt4 book ai didi

c++ - 将 rend 迭代器转换为 end 迭代器

转载 作者:太空狗 更新时间:2023-10-29 20:12:36 35 4
gpt4 key购买 nike

这不是如何将 reverse_iterator 转换为 iterator 的重复,因为我希望结果与正常转换不同。

只给定一个从 rend 返回的 reverse_iterator ,是否可以将其转换为相应的 iterator结束?

例如

std::vector<int> myvec = {...};
auto rit = myvec.rend();
auto it = MAGIC(rit);
it == myvec.end(); // true

如果仅给定 reverse_iterator 不可能做到这一点,那么做到这一点所需的最少信息是什么? (所以我可以考虑变通办法)。

最佳答案

简答:否。
迭代器指的是容器中的一个点,而不需要容器本身的实际知识。 end()rend() 返回的迭代器指向容器的不同端点,即它们指向的点之间可能有一些、很多或没有元素,不管其中一个迭代器的反向性质如何。因此,在不知道容器本身或至少不知道其大小的情况下,不可能从容器的一端到达另一端,并且由于迭代器不知道该知识,因此不可能从 rend()end(),从 end()begin() 等,无需额外信息。

最少需要的信息是两点之间“差距”的大小。有了它以及反向和非反向迭代器之间的正常转换,这是一个简单的任务:

auto rend = v.rend();
auto begin = rend.base();
assert(begin == v.begin());
auto end = begin + v.size(); //the size is the key!
assert(end == v.end());

但是,由于您无法从 reverse_iterator 中获取大小,而只能从容器本身获取大小,因此您可以轻松地首先向它请求 end()

关于c++ - 将 rend 迭代器转换为 end 迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26757121/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com