c – 将rend迭代器转换为end iteterator
发布时间:2020-12-16 09:55:03 所属栏目:百科 来源:网络整理
导读:这不是如何将reverse_iterator转换为迭代器的重复,因为我希望结果与正常转换不同. 只给出从rend返回的reverse_iterator,是否可以将其转换为从end返回的相应迭代器? 例如 std::vectorint myvec = {...};auto rit = myvec.rend();auto it = MAGIC(rit);it ==
这不是如何将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(). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |