2013-06-05 7 views
11

मैं सिर्फ सीख रहा हूं और शायद एक बेवकूफ सवाल है।std :: सूची अनपेक्षित परिणाम देने का आकार बदलती है

मेरे पास 2 कंटेनर हैं, एक वेक्टर है और एक सूची है। वे दोनों इंट्स 1,2,3,4 से भरे हुए हैं। प्रारंभ होने के बाद मैं कंटेनर का आकार सात के आकार में बदलता हूं, फिर कंटेनर की सामग्री प्रिंट करता हूं।

#include <iostream>  
#include <vector>  
#include <list> 

int main() 
{ 
std::list<int> lst= {1,2,3,4}; 
std::vector<int> vec = {1,2,3,4}; 

lst.resize(7); 
vec.resize(7); 

for (auto p = lst.begin(); p!=lst.end(); ++p) 
    std::cout<<"List: "<<*p<<std::endl; 

for (auto p = vec.begin(); p!=vec.end(); ++p) 
    std::cout<<"Vector: "<<*p<<std::endl; 

return 0; 
} 

उत्पादन मैं हो रही है में:

List: 1 
List: 2 
List: 3 
List: 4 
List: 0 
List: 1994995248 
List: 0 
Vector: 1 
Vector: 2 
Vector: 3 
Vector: 4 
Vector: 0 
Vector: 0 
Vector: 0 

मैं स्पष्ट रूप से सूची है कि मैं 0 द्वारा जोड़ा जा रहा इस से बचने के लिए बताने के लिए है?

+2

आप किस कंपाइलर का उपयोग कर रहे हैं? मुझे लगता है कि इसे यहां पुन: उत्पन्न करने में सक्षम नहीं है: http: //ideone.com/9BwQJ6। यदि आप आकार बदलते हैं तो मान को निर्दिष्ट नहीं करते हैं, तो उन्हें मूल्य मानने के लिए माना जाता है। – taocp

+0

http://www.cplusplus.com/reference/list/list/resize/ – Nic007

+0

अच्छा, वास्तव में ऐसा लगता है कि इसे स्पॉट भरने के लिए डिफ़ॉल्ट मान का उपयोग करना चाहिए, लेकिन आप 'lst.resize (7, 0) को कॉल करने का प्रयास कर सकते हैं। ; ', बस यह देखने के लिए कि क्या होगा। – cxyzs7

उत्तर

1

अन्य उपयोगकर्ताओं द्वारा पोस्ट किया गया, lst.resize(7,0) आपकी समस्या का समाधान करेगा। lst.resize(7) का उपयोग करना और प्रारंभिक मान को छोड़ना संकलक को बताता है कि इससे कोई फर्क नहीं पड़ता कि मूल्य क्या है (संभवतः क्योंकि आप इसे बाद में सेट करने जा रहे हैं)। यह ऑपरेटिंग सिस्टम को बदलने के संसाधनों को खर्च करने के बजाय स्मृति में जो भी यादृच्छिक मूल्य बैठा है उसे छोड़ने की अनुमति देता है।

दूसरी ओर Vector कंटेनर में कोड शामिल है जो स्वचालित रूप से आपके आइटम को शून्य पर प्रारंभ करता है।

+2

मैंने सोचा कि सूची के अन्य तत्वों के लिए मानक आवश्यक है '0' के लिए भी – blue

+0

प्रारंभ किया गया है, हालांकि यह C++ मानक के अनुरूप नहीं है, जिसके लिए नए तत्वों को मूल्य-प्रारंभिक (और इस प्रकार 'int' के लिए शून्य-प्रारंभिक) की आवश्यकता होती है। –

+0

एक सामान्य कार्यान्वयन में 'आकार बदलें' में दो पैरामीटर होते हैं जिनके पास मूल्य-प्रारंभिक डिफ़ॉल्ट तर्क होता है। इस कारण से 'lst.resize (7)' 'lst.resize (7, 0)' के बराबर है और शून्य के साथ नए तत्वों को आरंभ करने की गारंटी है। अन्य कार्यान्वयन इसे अलग-अलग कर सकते हैं (अधिभार आदि), लेकिन अंतिम परिणाम एक जैसा होना चाहिए। – AnT

संबंधित मुद्दे