नियंत्रण प्रवाह के साथ iterators

0

सवाल

कहते हैं कि मैं इस तरह से कुछ:

void myFunk(std::vector<T>& v, std::vector<T>::iterator first, std::vector<T>::iterator last) {
    while (first != last) {
        if ((*first) > (*last)) {
            T someT;
            v.push_back(someT);
        }
        first++;
    }
}

int main(){
    std::vector<T> foo = {some, T, values};
    myFunky(foo, foo.begin(), foo.end())
    return 0;
}

यह नेतृत्व करने के लिए एक अनंत लूप, या यह अंत के बाद foo.size() पुनरावृत्तियों? अन्य शब्दों में, होगा last इटरेटर के रूप में अद्यतन किया foo वृद्धि हुई है, या यह को बनाए रखने के मूल्य में दिए गए फंक्शन को कॉल?

मैं मान रहा हूँ last बदल जाएगा, के बाद से यह करने के लिए एक सूचक की स्थिति है, लेकिन कुछ करना चाहते पुष्टि की है ।

c++ controls flow iterator
2021-11-18 16:56:38
1

सबसे अच्छा जवाब

0

यह नेतृत्व करने के लिए एक अनंत लूप, या यह अंत के बाद foo.size() पुनरावृत्तियों?

न तो. क्या आप कर रहे हैं अपरिभाषित व्यवहारके लिए कारणों की एक जोड़ी:

  • आप कर रहे हैं को संशोधित करने के लिए vector जबकि के माध्यम से पुनरावृति ।

    यदि वेक्टर reallocates अपने आंतरिक भंडारण धक्का जब एक नया आइटम है, सभी मौजूदा iterators में vector कर रहे हैं अवैध, दोनों सहित iterators आप कर रहे हैं का उपयोग करने के लिए पाश के साथ. लेकिन यहां तक कि सिर्फ धक्का एक नया आइटम हमेशा invalidates end() इटरेटर, कम से कम.

    देखें इटरेटर रद्द नियमों के लिए C++ कंटेनर

  • आप कर रहे हैं dereferencing end() इटरेटर, जो कभी नहीं संदर्भित करता है के लिए एक वैध तत्व है ।

मैं मान रहा हूँ last बदल जाएगा, के बाद से यह करने के लिए एक सूचक की स्थिति

यह परिवर्तन नहीं कर सकते हैं, के बाद से आप इसे पारित में myFunc समारोह के द्वारा मूल्य है, तो यह एक प्रतिलिपि मूल के end() इटरेटर. अगर end() परिवर्तन मूल्य, last परिवर्तन नहीं होगा मूल्य के बाद से, यह एक प्रतिलिपि.

किसी भी मामले में, iterators जरूरी नहीं कर रहे हैं के रूप में लागू किया संकेत है, लेकिन संकेत कर रहे हैं मान्य iterators. लेकिन यह बात नहीं है इस मामले में. यहां तक कि अगर vector::iterator थे सिर्फ एक सरल सूचक है, last होगा अभी भी अवैध पर हर धक्का/reallocation.

2021-11-18 21:20:33

गुजर मूल्य द्वारा जानबूझकर किया गया था - विचार किया गया था करने के लिए प्रयास करें बनाने के लिए वेक्टर पुनरावृति में वर्तमान मूल्यों, जबकि appending नए लोगों के अंत में. समझ में आता है मैं हो रही थी स्मृति पहुँच उल्लंघन रन-समय पर. के लिए धन्यवाद रद्द नियमों प्लग (मैं जानता था कि मैं क्या देख रहा था के लिए प्रलेखित किया गया था लेकिन पता नहीं था कैसे करने के लिए यह क्रिया बनाना). और उत्तर के लिए धन्यवाद आदमी. वास्तव में मंजूरी दे दी है. चीयर्स!
Pedro Barbeira

मैं सुझाव है कि कैशिंग सम्मिलित करने के लिए, एक स्थानीय वेक्टर, और फिर संलग्न करने के लिए है कि अंत लक्ष्य के वेक्टर के बाद यात्रा समाप्त हो गया है.
Remy Lebeau

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में