c – 将rend迭代器转换为end iteterator

c – 将rend迭代器转换为end iteterator,第1张

概述这不是如何将reverse_iterator转换为迭代器的重复,因为我希望结果与正常转换不同. 只给出从rend返回的reverse_iterator,是否可以将其转换为从end返回的相应迭代器? 例如 std::vector<int> myvec = {...};auto rit = myvec.rend();auto it = MAGIC(rit);it == myvec.end(); 这不是如何将reverse_iterator转换为迭代器的重复,因为我希望结果与正常转换不同.

只给出从rend返回的reverse_iterator,是否可以将其转换为从end返回的相应迭代器?

例如

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

如果仅在给定reverse_iterator的情况下无法执行此 *** 作,那么执行此 *** 作所需的最少信息是什么? (所以我可以考虑解决方法).

解决方法 简答:不.
迭代器指的是容器中的一个单独的点,而不是容器本身的实际知识.由end()和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 iteterator全部内容,希望文章能够帮你解决c – 将rend迭代器转换为end iteterator所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1216336.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存