C++泛型指標的正向與逆向迴圈讀取時報錯Expreeeion:vector iterator + offset out of range問題

來源:互聯網
上載者:User

標籤:

首先看圖

 

代碼:

// 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.1, 4.4, 3.3, 2.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。 

逆向泛型指標同理。


 

C++泛型指標的正向與逆向迴圈讀取時報錯Expreeeion:vector iterator + offset out of range問題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.