2013-10-19 15 views
9

से सी ++ वेक्टर सबस्क्रिप्ट बाहर निम्न कोड लूप के लिए पहले 10 मानों के साथ वेक्टर भरता है। लूप के लिए दूसरे में मैं वेक्टर के तत्वों को मुद्रित करना चाहता हूं। आउटपुट जे लूप से पहले cout कथन तक है। श्रेणी के बाहर वेक्टर सबस्क्रिप्ट की त्रुटि देता है।डीबग दावा विफल रहा।

#include "stdafx.h" 
#include "iostream" 
#include "vector" 
using namespace std; 

int _tmain(int argc, _TCHAR* argv[]) 
{ vector<int> v; 

    cout<<"Hello India"<<endl; 
    cout<<"Size of vector is: "<<v.size()<<endl; 
    for(int i=1;i<=10;++i) 
    { 
     v.push_back(i); 

    } 
    cout<<"size of vector: "<<v.size()<<endl; 

    for(int j=10;j>0;--j) 
    { 
     cout<<v[j]; 
    } 

    return 0; 
} 

उत्तर

8

कैसे आप सूचकांक कर की परवाह किए बिना pushbacks अपने वेक्टर 10 तत्वों 0 से अनुक्रमित शामिल (0, 1, ..., 9)। तो आपके दूसरे लूप में v[j] अमान्य है, जब j10 है।

यह त्रुटि ठीक कर देंगे:

for(int j = 9;j >= 0;--j) 
{ 
    cout << v[j]; 
} 

सामान्य यह आधारित 0 के रूप में अनुक्रमित के बारे में सोचना बेहतर है में, तो मैं आप भी इस के लिए अपना पहला पाश को बदलने का सुझाव देते हैं:

for(int i = 0;i < 10;++i) 
{ 
    v.push_back(i); 
} 
5

v है 10 तत्व, सूचकांक 0 से 9 से शुरू होता है।

for(int j=10;j>0;--j) 
{ 
    cout<<v[j]; // v[10] out of range 
} 

आप उलटे क्रम में तत्व मुद्रित करने के लिए for पाश

को
for(int j=9; j>=0; --j) 
//  ^^^^^^^^^^ 
{ 
    cout<<v[j]; // out of range 
} 

या का उपयोग रिवर्स इटरेटर अद्यतन करना चाहिए

for (auto ri = v.rbegin(); ri != v.rend(); ++ri) 
{ 
    std::cout << *ri << std::endl; 
} 
संबंधित मुद्दे