मैं वर्तमान में एसटीएल सीख रहा हूं, और मैपिंग, फ़िल्टरिंग इत्यादि के विषय पर हूं। मैंने हाल ही में बहुत सी नई चीजें सीखी हैं जैसे लूप के लिए नया सी ++ 11 (ऑटो के साथ) I (थोड़े) चीजों के काम करने के तरीके को समझ में नहीं आता है , लेकिन मैं एक और वेक्टर (मैपिंग विषय) को भरने के लिए "ट्रांसफ़ॉर्म" फ़ंक्शन का उपयोग करना चाहता था। लेकिन जब मैं प्रोग्राम बनाता हूं और इसे चलाता हूं, तो यह मुझे एक त्रुटि देता है जो इस प्रकार है: "मूल्य-प्रारंभिक वेक्टर इटरेटर की तलाश नहीं कर सकता"

मुझे यकीन नहीं है कि इसका क्या मतलब है या क्या त्रुटि है, क्या आप लोग मुझे लूप अवधारणा को समझने में मदद कर सकते हैं और मैं यहां क्या गलत कर रहा हूं?

अनुलेख अंत में "ट्रांसफॉर्म" का ऑपरेटर ट्यूटोरियल में लैम्ब्डा चीज़ (जिसे मुझे अभी भी सीखना है और इसके बारे में कोई जानकारी नहीं है) के साथ किया गया था, मैंने एक फ़ंक्शन बनाने की कोशिश की और अनुमान लगाया कि यह काम करेगा।

int mult(int a) {
    return a * 10;
}
int main() {
    vector<int> v{ 1,2,3,4,5 };
    vector<int> v1;
    for (auto& i : v) {
        cout << i << endl;
    }
    if (v1.empty()) cout << "v1 is empty" << endl;
    cout << "v1" << endl;
    transform(v.begin(), v.end(), v1.begin(), mult);
    for (auto &i : v1) {
        cout << i << endl;
    }
}
2
David Petriashvili 7 अगस्त 2019, 14:25

2 जवाब

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

transform एक सीमा का विस्तार नहीं करता है, यह केवल एक मौजूदा पर लिखता है जिसे गैर-रिक्त माना जाता है। v1 खाली है, इसलिए इसे परिवर्तन के परिणाम को संग्रहीत करने के लिए नहीं बनाया जा सकता है। आपके विकल्प यह सुनिश्चित करने के लिए हैं कि v1 में एल्गोरिथम को अधिलेखित करने के लिए पर्याप्त तत्व हैं:

vector<int> v1(v.size());

या आकार बढ़ाने वाला एक पुनरावर्तक बनाने के लिए std::back_inserter का उपयोग करने के लिए v1 का:

transform(v.begin(), v.end(), back_inserter(v1), mult);
4
StoryTeller - Unslander Monica 7 अगस्त 2019, 14:29

यह यूबी (अपरिभाषित व्यवहार) है, यह कुछ भी नहीं भरता है:

transform(v.begin(), v.end(), v1.begin(), mult);

तुम्हें चाहिए:

std::transform(v.begin(), v.end(), std::back_inserter(v1), mult);

एक सामान्य नियम के रूप में, प्रारंभ/अंत पुनरावृत्तियों पर संचालन कंटेनर के आकार को नहीं बदलता है।

आपके कोड ने डेटा को एक खाली बफर में, स्मृति को दूषित या बदतर बना दिया है।

3
Yakk - Adam Nevraumont 8 अगस्त 2019, 03:15