मैंने एक कक्षा लिखी है जो सीएसवी प्रारूपित फ़ाइलों को पार्स करने के लिए एक इटरेटर की तरह कार्य करता है। मैंने सीधे एक MyObject संरचना को भरने के लिए विशिष्ट सीएसवी फ़ाइलों को पढ़ने के लिए अन्य कक्षाएं भी लिखी हैं।क्या स्वरूपित स्ट्रीम पर पढ़ने के लिए इटरेटर का उपयोग करना एक अच्छी बात है?
std::ifstream in(filename);
MyObjectParser parser(in);
MyObjectParser::Iterator it;
for (it = parser.begin(); it != parser.end(); it++)
{
MyObject b = *it;
// do some stuff here ...
}
कार्यक्रम अच्छी तरह से काम करता है और मैं इसके साथ खुश हूँ, लेकिन मुझे लगता है कि निहित अर्थ (केवल खुद के लिए महसूस किया: इस प्रकार वर्ग की तरह है कि (मैं कोड का हिस्सा निपटने त्रुटि हटाया) का इस्तेमाल किया जा सकता है?) एक इटरेटर का है कि यह संग्रह पर पुन: सक्रिय होगा। इस मामले में कोई संग्रह नहीं है लेकिन एक धारा है।
std::ifstream in(filename);
MyObjectReader reader(in);
MyObject obj;
while(reader >> obj)
{
// do the same "some stuff" here...
}
यह स्वाद का केवल एक बात है:
मैं एक रूप को स्पष्ट रूप से अधिक भार से >> ऑपरेटर मैं एक धारा का उपयोग कर रहा सुझाव है कि और ऐसा ही कुछ इस प्रकार हो रही पसंद करते हैं चाहिए? मैं स्पष्ट रूप से नहीं देखता कि मतभेद क्या हैं (सिवाय इसके कि दूसरे रूप में ऑब्जेक्ट अभी भर चुका है और प्रतिलिपि नहीं है) और पहले या दूसरे रूप को चुनने के क्या परिणाम हैं।
मुझे यह जानने के लिए कुछ अन्य राय मिलकर खुशी होगी कि मैं दूसरे के बजाय समाधान का उपयोग क्यों कर रहा हूं।
कौन कहता है कि इटेटर को * संग्रह * पर फिर से चालू होना चाहिए? मेरी समझ यह है कि इटेटरेटर्स * कुछ * पर * * कुछ * ** किसी भी प्रकार का डेटा **, उदाहरण के लिए एक कंटेनर, एक स्ट्रीम (फ़ाइल, नेटवर्क डेटा, ...) या यहां तक कि कुछ अंतर्निहित (शायद डमी) डेटा। इसे सामान्य रखें। ;) मैं व्यक्तिगत रूप से आपके इटरेटर-आधारित इंटरफ़ेस को पसंद करता हूं। – leemes