免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7851 | 回复: 5
打印 上一主题 下一主题

[算法] 不用标准算法,如何实现vector的反向遍历? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-10-31 17:17 |只看该作者 |倒序浏览
比方说,下面一个超级简单的小程序:


  1.      1 #include <vector>;
  2.       2 #include <iostream>;
  3.       3 #include <string>;
  4.       4 #include <algorithm>;
  5.       5 using namespace std;
  6.       6 void print_(string s)
  7.       7 {
  8.       8         cout<<s;
  9.       9         cout<<endl;
  10.      10 }
  11.      11
  12.      12 int main(void)
  13.      13 {
  14.      14         vector<string>; my;
  15.      15         my.push_back("Tu Fu");
  16.      16         my.push_back("Li Pai");
  17.      17         my.push_back("Huang ting jian");
  18.      18         my.push_back("Huang jie");
  19.      19         my.push_back("Fan ken tang");
  20.      20         my.push_back("Arc camus");
  21.      21
  22.      22         vector<string>;::iterator myi;
  23.      22         vector<string>;::iterator myi;
  24.      23 /*
  25.      24         for(myi=my.end()-1;myi!=my.begin();myi--)
  26.      25                 cout<<*myi<<endl;
  27.      26 */  //这种方法也漏掉了my.begin()指向的元素
  28.      27         myi=my.end()-1;
  29.      28         do
  30.      29         {
  31.      30                 cout<<*myi<<endl;
  32.      31                 myi--;
  33.      32         }
  34.      33         while
  35.      34                 (myi!=my.begin());//漏掉了my.begin()指向的元素
  36.      35
  37.      36         cout<<"size is "<<my.size()<<endl;
  38.      37
  39.      38
  40.      39
  41.      40
  42.      41         return 0;
  43.      42 }
  44.      43
复制代码


输出是这样的:
  1. [root@localhost algorithm]# ./a.out
  2. Arc camus
  3. Fan ken tang
  4. Huang jie
  5. Huang ting jian
  6. Li Pai
  7. size is 6
  8. [root@localhost algorithm]#
复制代码


当然,倘若使用for_each算法和rbegin()、rend()迭代器,反向输出就很简单了;可是通过定义vector::iterator变量来前向遍历是可能的,为什么通过该方法来实现反向遍历就总会漏掉*my.begin()呢?
是不是有什么办法可以实现反向遍历,请高手不吝赐教!!

论坛徽章:
0
2 [报告]
发表于 2004-10-31 18:02 |只看该作者

不用标准算法,如何实现vector的反向遍历?

可以用"传统"的办法:
for(int i=v.size()-1;i>;=0;i--)
cout<<v;

论坛徽章:
0
3 [报告]
发表于 2004-10-31 18:07 |只看该作者

不用标准算法,如何实现vector的反向遍历?

还有一种办法是用Reversible Container
不过这个我没用过.你看看stl的手册吧.很简单的.

const_reverse_iterator rbegin() const Reversible Container Returns a const_reverse_iterator pointing to the beginning of the reversed vector. const_reverse_iterator rend() const Reversible Container Returns a const_reverse_iterator pointing to the end of the reversed vector.

论坛徽章:
0
4 [报告]
发表于 2004-10-31 18:08 |只看该作者

不用标准算法,如何实现vector的反向遍历?

哈哈,忘了不用迭代器了,这个遗忘比较经典~~

谢谢楼上兄弟~~

论坛徽章:
0
5 [报告]
发表于 2004-10-31 18:10 |只看该作者

不用标准算法,如何实现vector的反向遍历?

  1. myi=my.end();
  2. do
  3. {
  4. myi--;
  5. cout<<*myi<<endl;
  6. }
  7. while
  8. (myi!=my.begin());//漏掉了my.begin()指向的元素
复制代码


这样一改好像也行.你试试.

论坛徽章:
0
6 [报告]
发表于 2004-10-31 18:19 |只看该作者

不用标准算法,如何实现vector的反向遍历?

是哦是哦,试过了没想到居然另外还有3中方法之多!!我学的还是太差了,需要努力啊
多谢兄弟的热心指点~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP