C++泛型指针的正向与逆向循环读取时报错Expreeeion:vector iterator + offset out of range问题...

首先看图

 

代码:

//  test.cpp : 定义控制台应用程序的入口点。
// C++程序设计
// 2015-5-4

// STL strandard template libeary

#include  " stdafx.h "
#include <iostream>
#include <algorithm>
#include <functional>
#include <vector>
#include <iterator>
using  namespace std;

int _tmain( int argc, _TCHAR* argv[])
{
    
// 演示泛型指针和copy函数的例子
     double a[] = {  1.14.43.32.2 };
    vector< double> va(a, a +  4);     // 初始化并定义va
    typedef vector< double>::iterator vi;
    vi first = va.begin();     // 自定义一个正向泛型指针first并指向va的首元素
     for (first; first < va.end(); first++)     // 正向输出va
        cout << *first <<  "   ";
    cout << endl;
     // 循环逆向输出va 
     for (--first; first>va.begin(); first--) //不做va.begin()-1
    {
        cout << *first <<  "   ";
         if (first == va.begin()+ 1) //当指针到达being()后一个地址时,同时输出begin()地址上的值
            cout << *(first- 1) <<  "   ";
    }
    cout << endl;
    copy(va.begin(), va.end(), ostream_iterator< double>(cout,  "   "));     // 整体正向输出va
    cout << endl;

    typedef vector< double>::reverse_iterator vri;
    vri last = va.rbegin();
     // 使用逆向指针循环从尾到首输出va
     for (last; last<va.rend(); last++)
    {
        cout << *last <<  "   ";
    }
    cout << endl;
     // 使用逆向指针循环从首到尾输出va
     for (--last; last>va.rbegin(); last--)
    {
        cout << *last <<  "   " ;
         if (last == va.rbegin() +  1) //当指针到达rbeing()前一个地址时,同时输出rbegin()地址上的值
            cout << *(last -  1) <<  "   ";
    }
    cout << endl;
    copy(va.rbegin(), va.rend(), ostream_iterator< double>(cout,  "   "));     // 整体从尾到首输出va
    cout << endl;
     return  0;

} 

 

不能将for (--first; first>va.begin(); first--) 或  for (--last; last>va.rbegin(); last--) 中的
  va.begion()-1 或 va.rbegin()-1,原因是fisrt指针,它们的在数组中的作用范围各自是[begion,end)与(rend,rbegion]

就是说:正向泛型指针逆向循环时,a.begin以外的范围。所以代码中-1会心指针继续做first--,到此报错Expreeeion:vector iterator + offset out of range。 

逆向泛型指针同理。


 

转载于:https://www.cnblogs.com/freemindblog/p/4478800.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值