如何把正向迭代器转化为反向迭代器?

大狮兄 2014-01-17 09:40:42
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<iterator>
#include<list>
#include<numeric>
#include<fstream>
using namespace std;

int main()
{
vector<int> li{ 1, 2, 3, 0, 4,3, 5, 6, 0, 7, 8, 9 };
auto me = find(li.begin(), li.end(), 3);
auto you = find(li.rbegin(), li.rend(), 7);
list<int>xiao(++me,--you.base());
ostream_iterator<int>ofi(cout, " ");
copy(xiao.begin(), xiao.end(), ofi);
cout << endl;
return 0;
}

我想把3和7之间的数字逆序拷贝到list里面,目前遇到的问题就是该如何才能把me转化为逆向的?
...全文
740 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
iamGaffeyZ 2014-12-18
  • 打赏
  • 举报
回复
挺有用,受教
漫步者、 2014-01-20
  • 打赏
  • 举报
回复
你不知道每个容器中有个reverse吗?
qingcairousi 2014-01-18
  • 打赏
  • 举报
回复
http://en.cppreference.com/w/cpp/iterator/reverse_iterator/reverse_iterator

#include <iterator>

std::reverse_iterator riter(xiao.end());
lm_whales 2014-01-18
  • 打赏
  • 举报
回复
#include <iostream>
#include <iterator>
#include <list>
#include <vector>


using namespace std;

template <typename Iterator,typename Object>
void print_msg(const string &msg,const Iterator& from,const Iterator& to,const Object&,ostream &os =cout)
{
    os<<msg<<" ";
    ostream_iterator<Object>ofi(cout, " ");
    copy(from,to, ofi);
    os<<endl;
}


int main()
{
    vector <int> v{1,2,3,0,3,4,5,6,7,0,9,8,7,6};
    ostream_iterator<int>ofi(cout, " ");

    vector <int>::iterator iv_7 =v.end()-1,iv_3 = v.begin()+4;
    vector<int>::reverse_iterator rv_beg(iv_7),rv_end(iv_3);

    print_msg("vector all output:",v.begin(),v.end(),*v.begin());
    print_msg("vector all reverse output:",v.rbegin(),v.rend(),*v.rbegin());

    print_msg("vector part output:",iv_3,iv_7,*iv_3);
    print_msg("vector part reverse output:",rv_beg,rv_end,*rv_beg);
    cout<<"============================"<<endl;


    list <int> lst(iv_3,iv_7);
    list <int>::iterator il_7(lst.end()),il_3(lst.begin());
    list <int>::reverse_iterator rl_beg(il_7),rl_end(il_3);

    print_msg("list all output:",lst.begin(),lst.end(),*lst.begin());
    print_msg("list all reverse output:",lst.rbegin(),lst.rend(),*lst.rbegin());

    print_msg("list part output:",il_3,il_7,*il_3);
    print_msg("list part reverse output:",rl_beg,rl_end,*rl_beg);

    return 0;
}
lm_whales 2014-01-18
  • 打赏
  • 举报
回复
反向迭代器,可以用正向迭代器初始化。 #include <iostream> #include <iterator> #include <list> #include <vector> using namespace std; template <typename Iterator,typename Object> void print_msg(const string &msg,const Iterator& from,const Iterator& to,const Object&,ostream &os =cout) { os<<msg<<" "; ostream_iterator<Object>ofi(cout, " "); copy(from,to, ofi); os<<endl; } int main() { vector <int> v{1,2,3,0,3,4,5,6,7,0,9,8,7,6}; ostream_iterator<int>ofi(cout, " "); vector <int>::iterator iv_7 =v.end()-1,iv_3 = v.begin()+4; vector<int>::reverse_iterator rv_beg(iv_7),rv_end(iv_3); print_msg("vector all output:",v.begin(),v.end(),*v.begin()); print_msg("vector all reverse output:",v.rbegin(),v.rend(),*v.rbegin()); print_msg("vector part output:",iv_3,iv_7,*iv_3); print_msg("vector part reverse output:",rv_beg,rv_end,*rv_beg); cout<<"============================"<<endl; list <int> lst(iv_3,iv_7); list <int>::iterator il_7(lst.end()),il_3(lst.begin()); list <int>::reverse_iterator rl_beg(il_7),rl_end(il_3); print_msg("list all output:",lst.begin(),lst.end(),*lst.begin()); print_msg("list all reverse output:",lst.rbegin(),lst.rend(),*lst.rbegin()); print_msg("list part output:",il_3,il_7,*il_3); print_msg("list part reverse output:",rl_beg,rl_end,*rl_beg); return 0; }
vipcxj 2014-01-17
  • 打赏
  • 举报
回复

reverse(xiao.begin(), xiao.end());
taodm 2014-01-17
  • 打赏
  • 举报
回复
去看《stl源码剖析》吧,上面肯定有答案。

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧