只给出从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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)