जब मैं अन्य लोगों के साथ सहमत नहीं है कि एक के प्रत्यक्ष उपयोग इटेरेबल कंटेनर एक पसंदीदा समाधान है, मैं यह इंगित करना चाहता हूं कि सी ++ मानक किसी भी कारण से आप इसे चाहे किसी भी तरह के समाधान के लिए पर्याप्त समर्थन की गारंटी देता है।
अर्थात्, आप std::queue
से विरासत और अंतर्निहित कंटेनर के शुरू() और अंत तक पहुँचने के लिए() अपने संरक्षित सदस्य Container c;
उपयोग कर सकते हैं (बशर्ते कि इस तरह के तरीकों वहाँ मौजूद हैं)। यहाँ एक उदाहरण है कि VS 2010 और tested with ideone में काम करता है:
#include <queue>
#include <deque>
#include <iostream>
template<typename T, typename Container=std::deque<T> >
class iterable_queue : public std::queue<T,Container>
{
public:
typedef typename Container::iterator iterator;
typedef typename Container::const_iterator const_iterator;
iterator begin() { return this->c.begin(); }
iterator end() { return this->c.end(); }
const_iterator begin() const { return this->c.begin(); }
const_iterator end() const { return this->c.end(); }
};
int main() {
iterable_queue<int> int_queue;
for(int i=0; i<10; ++i)
int_queue.push(i);
for(auto it=int_queue.begin(); it!=int_queue.end();++it)
std::cout << *it << "\n";
return 0;
}
स्रोत
2011-05-12 20:39:57
जबकि मुझे पता है कि आप क्या कह रहे हैं, मैंने हमेशा इस वाक्यांश को "कतार से कुछ और" नापसंद किया है। गणना के साथ एक कतार अभी भी एक कतार है ... साथ ही, ध्यान दें कि पूरी तरह से मनमाने ढंग से गणना का समर्थन करने के लिए 'डेक' कैसे होता है। आप बस तर्क दे सकते हैं कि 'डेक' को 'कतार' के रूप में शुद्धवादी होना चाहिए और पुनरावृत्ति का समर्थन नहीं करना चाहिए, और यदि आप इसे फिर से बनाना चाहते हैं तो आप कुछ "अधिक" चाहते हैं; जैसे एक 'deque_enumerable'। हालांकि यह एक फिसलन ढलान है, और मेरी व्यक्तिगत भावना यह है कि 'कतार' को पहली जगह में गणना का समर्थन करना चाहिए था। –
@romkyns: अगर मैं इसे फिर से लिखता हूं तो बेहतर होगा: "आपको 'कतार' इंटरफ़ेस की तुलना में एक अमीर इंटरफ़ेस के साथ कुछ चाहिए, इसलिए आपको एक उपयुक्त इंटरफ़ेस वाला ऑब्जेक्ट चुनना चाहिए"। इसकी तरह या नहीं, पुनरावृत्ति 'कतार' इंटरफ़ेस का हिस्सा नहीं है, इसलिए यदि आप पुनरावृत्ति चाहते हैं तो आपको कुछ और चुनना होगा। –
क्योंकि मेरे उपयोग के मामले में एक कतार की आवश्यकता है, लेकिन मुझे डीबग और लॉगिंग उद्देश्यों के लिए इसे बाहर निकालना होगा। आम तौर पर यह मानने के लिए रचनात्मक नहीं है कि पोस्टर नहीं जानते कि वे क्या कर रहे हैं। – EML