AFAIK std :: कॉपी एल्गोरिदम कुछ भी जांच नहीं करता है और केवल सभी तत्वों पर पुनरावृत्त करता है और उन्हें आउटपुटर आउटपुट करने की प्रतिलिपि बनाता है। इसका मतलब यह है कि आपको आउटपुट इटरेटर में खुद को एनोट स्पेस प्रदान करना चाहिए अन्यथा व्यवहार अनिर्दिष्ट है।
तो आपके मामले में आपको खुद को जांचना चाहिए कि आउटपुट फ़ाइल लिखने योग्य है, आदि .. यह जांचने के संभावित तरीकों में से एक मुझे लगता है कि आप जिस फ़ाइल स्ट्रीम का उपयोग कर रहे हैं, उसके लिए त्रुटि झंडे का उपयोग करें, यानी यह जांचने के बाद कि आपका ofstream
good
है (आप good()
, eof()
, fail()
और bad()
इस के लिए फ़ंक्शन का उपयोग कर सकते हैं)।
दूसरा दृष्टिकोण std::copy
के वापसी मूल्य की जांच करना है। चूंकि यह गंतव्य सीमा के अंत में एक पुनरावर्तक देता है (जो अंतिम की प्रति के बाद तत्व को इंगित करता है) तो आप std::copy
और आपके आउटपुट इटरेटर के रिटर्न वैल्यू के बीच अंतर की गणना कर सकते हैं और यह सुनिश्चित कर सकते हैं कि यह आकार के बराबर है आपका deque
। जैसे (स्यूडोकोड)
OutputIterator result = std::copy(input.begin(), input.end(), output);
assert(result - output == input.end() - input.begin());
संपादित करें: दूसरा दृष्टिकोण से काम करता है केवल जब output
भी इनपुट इटरेटर प्रकार है तो std::distance
इसके लिए काम किया।
assert(std::distance(output, result) == std::distance(input.begin(), input.end()));
स्रोत
2012-03-13 10:04:58
तुम सिर्फ जाँच नहीं कर सकते [धारा आई/ओ राज्य] (http://en.cppreference.com/w/cpp/io/ios_base/iostate): यह लिखने के लिए और अधिक सही होगा? –