list::splice()
का 3-तर्क फ़ॉर्म एक सूची से दूसरे में एक तत्व को स्थानांतरित करता है। SGI's documentation स्पष्ट रूप से बताता है कि सभी iterators, तत्व को इंगित करने वाला एक बिंदु मान्य रहता है। Roguewave's documentationsplice()
विधियों के इटरेटर अमान्यता गुणों के बारे में कुछ भी नहीं कहता है, जबकि सी ++ मानक स्पष्ट रूप से बताता है कि यह सभी इटरेटर और विभाजन के तत्वों को संदर्भित करता है।splice() std :: list और iterator अमान्यता
स्प्लिसिंग() अभ्यास में एसजीआई द्वारा परिभाषित कार्यों के रूप में काम करता है, लेकिन मुझे माइक्रोसॉफ्ट के एसटीएल कार्यान्वयन (जो मानक के पत्र का सख्ती से पालन करता है) के डीबग/सुरक्षित एससीएल संस्करणों में दावा विफलता (अमान्य पुनरावर्तक को अस्वीकार कर रहा है) प्राप्त करता है।
अब, मैं सूची का उपयोग कर रहा हूं क्योंकि मैं सूचियों के बीच एक तत्व को स्थानांतरित करना चाहता हूं, जबकि इसे इंगित करने वाले इटरेटर की वैधता को संरक्षित करना। मानक ने मूल एसजीआई के विनिर्देश में बेहद असहनीय परिवर्तन किया है।
मैं इस समस्या के आसपास कैसे काम कर सकता हूं? या मुझे सिर्फ व्यावहारिक होना चाहिए और मेरे सिर को रेत में छूना चाहिए (क्योंकि विभाजन अभ्यास में इटरेटर्स को अमान्य नहीं करता है - एमएस के कार्यान्वयन में भी नहीं, एक बार इटरेटर डीबगिंग बंद हो जाता है)।
महान सवाल। अंतिम शब्द क्या था? –
मानक बेवकूफ है, लेकिन सही है। मानक-अनुरूप कार्यक्रमों में splice का उपयोग न करें। शायद सी ++ 1x स्थिति में संशोधन किया; मैंने चेक नहीं किया है – zvrba
मैंने अभी चेक किया है, यह बदलता है। शब्द बरकरार रखा गया है एलडब्ल्यूजी दोष 250 में से एक है: पुराना इटरेटर वैध हैं, और व्यवहार करते हैं जैसे वे नए कंटेनर को इंगित कर रहे हैं। –