नीचे दिए गए उदाहरण में, मैंने एक जनरेटर को सीड किया है ताकि 'डिस्ट्र (इंग्लैंड)' एक शब्द में अक्षरों की संख्या (उपयोगकर्ता-इनपुट (सीन >>) से प्राप्त) द्वारा निर्धारित सीमा के भीतर एक यादृच्छिक संख्या उत्पन्न करता है।

मैं चाहता हूं कि वेक्टर 'brr' बेतरतीब ढंग से उत्पन्न संख्याओं को धारण करे।

इसके अलावा इसका उद्देश्य डुप्लीकेट से बचना है, ताकि 7 वर्णों वाले एक शब्द के एक सिन का परिणाम 7 यादृच्छिक रूप से उत्पन्न संख्याओं (निर्धारित सीमा के भीतर) के साथ एक वेक्टर में हो, जो सभी एक दूसरे से भिन्न हों। मेरा कोड कोई त्रुटि नहीं देता है, लेकिन जब मैं वेक्टर 'brr' प्रिंट करता हूं तो कुछ नहीं होता (खाली प्रतीत होता है)। परिवर्तनीय 'नंबरोफ्लेटर्स' .size() के साथ हस्ताक्षरित/हस्ताक्षरित विरोध में नहीं है।

brr = { 0 };

do
{
    int z = distr(eng);
    int* pz = &z;

    for (it = brr.begin(); it != brr.end(); ++it)
    {  
      if (*it = *pz)
      {
        brr.insert(it, *pz);
      }
      else
      {
        brr.push_back(*pz);
      }
    }
}
while (brr.size() < numberofletters);
0
user359294 18 अप्रैल 2020, 10:55

1 उत्तर

सबसे बढ़िया उत्तर

सीधा - सा जवाब है 'नहीं!

एसटीडी में कोई भी इंसर्ट :: वेक्टर वेक्टर के सभी पुनरावृत्तियों को अमान्य कर सकता है क्योंकि पूर्ण सामग्री को स्थानांतरित किया जा सकता है, अगर वेक्टर को अपनी मेमोरी को फिर से आवंटित करना चाहिए।

std::vector::insert से

यदि नया आकार () पुरानी क्षमता () से अधिक है, तो पुन: आवंटन का कारण बनता है। यदि नया आकार () क्षमता () से अधिक है, तो सभी पुनरावृत्त और संदर्भ अमान्य हैं। अन्यथा, सम्मिलन बिंदु से पहले केवल पुनरावृत्त और संदर्भ मान्य रहते हैं। पास्ट-द-एंड इटरेटर भी अमान्य है।

3
Klaus 18 अप्रैल 2020, 08:00