C++ vector subsctript out of range -
abc.txt नामक फ़ाइल में, मेरे पास पाठ का इनपुट है:
नमूना पाठ नमूना पाठ नमूना पाठ नमूना पाठ नमूना पाठ सबसे पहले मैंने फ़ाइल से पाठ को पढ़ने के लिए चर (नामित पाठ) बनाया है। फिर प्रोग्राम abc.txt फ़ाइल पढ़ता है। मैंने नामित वेक्टर बनाया: Arr.Sent फाइल से प्रत्येक पंक्ति को बचाने के लिए abc.txt। लूप के बाद प्रोग्राम समाप्त होने पर फ़ाइल abc.txt बंद करें तब प्रोग्राम को वेक्टर अर्रेस्ट से स्क्रेंन तक सभी वाक्यों को आउट करना होगा। मुझे इस तरह की समस्या है: प्रोग्राम के बाद, संदेश के साथ चेतावनी दिखाई देती है: वेक्टर सबस्क्रिप्ट को सीमा से बाहर। मुझे नहीं पता क्यों ..
# शामिल है & lt; iostream & gt; # से & lt में शामिल हैं, स्ट्रिंग & gt; # से & lt में शामिल हैं, fstream & gt; # से & lt में शामिल हैं, वेक्टर & gt; नेमस्पेस एसटीडी का उपयोग करना; Void function () {string text; // चर फ़ाइल से पाठ बचाने के लिए ifstream myfile ("abc.txt"); // फ़ाइल से पढ़ने abc.txt वेक्टर & lt; string & gt; ArrSent; अगर (myfile.is_open ()) {// cout & lt; & lt; "myplik.good () =" & lt; & lt; Myfile.good () & lt; & lt; endl; जबकि (myfile.good ()) {getline (myfile, text); ArrSent.push_back (पाठ); } Myfile.close (); } के लिए (int i = 0; i & lt; = ArrSent.size (); i ++) {cout & lt; & lt; ArrSent [i] & lt; & lt; endl; }} Int main () {function (); प्रणाली ( "थामने"); वापसी 0; }
यह गलत है
के लिए ( Int i = 0; i & lt; = ArrSent.size (); i ++) {cout & lt; & lt; ArrSent [i] & lt; & lt; endl; } होना चाहिए
के लिए (int i = 0; i & lt; arrsent.size (); i ++) {cout & lt; & lt; ArrSent [i] & lt; & lt; endl; } इसका कारण यह है कि सी / सी ++ में, सदिश / सरणी शून्य आधारित हैं। इसका मतलब यह है कि, यदि आपके पास एक वेक्टर, my_vector, 10 का आकार है, यह मेरी_वेक्टर [0], my_vector [1], ... my_vector [9] की तरह है। कोई भी my_vector नहीं है [10]।
इसके माध्यम से पुनरावृत्त करने का एक बेहतर तरीका हो सकता है (C + + 11)
के लिए (const auto & amp; v: arrsent ) {Cout & lt; & lt; V & lt; & lt; endl; } या
के लिए (वेक्टर & lt; स्ट्रिंग & gt; :: const_iterator i = ArrSent.begin (); i! = ArrSent.end (); + + I) सीओएटी & एलटी; & lt; * I & lt; & lt; endl; जैसा कि हज़-क्राईग द्वारा बताया गया है, पढ़ने के लिए लूप भी छोटी है, एक बेहतर संस्करण हो सकता है
जबकि (getline (myfile, text)) {ArrSent.push_back (पाठ); }
एक शब्द के बारे में function उल्लेखनीय: आपका फ़ंक्शन नाम फ़ंक्शन है । हालांकि यह वर्णनात्मक हो सकता है, आपको पता होना चाहिए कि मानक लाइब्रेरी हेडर आसानी से अन्य मानक लाइब्रेरी हैंडर (और बहुत बार ऐसा ही करते हैं) को शामिल कर सकते हैं। मानक लाइब्रेरी में ऐसा एक शीर्ष लेख है जो कि घोषित करता है, किस्मत के रूप में होगा। आप की परवाह क्यों होगी? क्योंकि std :: function सहित नाम-स्थान योग्यता आवश्यकताओं के साथ खुले में std में आपके नामों का उपयोग करके नाम स्थान std; लाता है या नहीं आपने & lt; functional & gt; शामिल नहीं किया है जिसका अर्थ है कि यह अभी भी संकलित करेगा:
शून्य समारोह () {//। Stuff} यह संभवतः :
int main () {function (); // यहां // ... अन्य सामान} यह नहीं जानता कि क्या आप आपका फ़ंक्शन कॉल कर रहे हैं या एक अस्थायी प्रकार का इन्स्तांत करने का प्रयास कर रहे हैं std :: function & lt; & gt; (जो कि ऐसा नहीं कर सकते, क्योंकि कोई टेम्प्लेट पैरामीटर वर्णित नहीं है)। इसका परिणाम अस्पष्ट हो सकता है। आप :: function (); में अपने main () , लेकिन यह बेहतर होगा यदि आप संपूर्ण std पुस्तकालय में नामस्थान std; का उपयोग करके, और / या नामों का उपयोग न करने की आदत को विकसित किया है मानक पुस्तकालय से सामान्य प्रकार / आईडी।
Comments
Post a Comment