मैं चार एल्गोरिदम लागू कर रहा हूं जो पूरी तरह से समान डेटा संरचना का उपयोग करने के अलावा समान हैं - दो priority_queue
का उपयोग करते हैं, एक stack
का उपयोग करता है, और अंतिम उपयोग queue
का उपयोग करता है। वे अपेक्षाकृत लंबे हैं, तो मैं सिर्फ एक समारोह टेम्पलेट है कि एक टेम्पलेट तर्क के रूप में कंटेनर प्रकार स्वीकार करता है करना चाहते हैं और उसके बाद तो जैसे हर एल्गोरिथ्म कॉल कि उचित तर्क के साथ टेम्पलेट है,:मैं एक फ़ंक्शन टेम्पलेट कैसे लिख सकता हूं जो या तो स्टैक या कतार स्वीकार कर सकता है?
template <class Container>
void foo(/* args */)
{
Container dataStructure;
// Algorithm goes here
}
void queueBased(/* args */)
{
foo<queue<Item> >(/* args */);
}
void stackBased(/* args */)
{
foo<stack<Item> >(/* args */);
}
मैं priority_queue
- और stack
-आधारित कार्यान्वयन के साथ ऐसा करने में कामयाब रहा है, लेकिन मैं queue
-आधारित एल्गोरिदम के लिए ऐसा नहीं कर सकता क्योंकि यह सबसे महत्वपूर्ण तत्व (के बजाय front()
) तक पहुंचने के लिए एक अलग नाम का उपयोग करता है। मुझे पता है कि मैं इस मामले के लिए टेम्पलेट का विशेषज्ञ बन सकता हूं, लेकिन फिर मेरे पास डुप्लिकेट कोड का एक बड़ा हिस्सा होगा (जो मैं बचने की कोशिश कर रहा हूं)।
इसे पूरा करने का सबसे अच्छा तरीका क्या है? मेरा पहला वृत्ति कतार के लिए एक रैपर वर्ग बनाना था जो top()
ऑपरेशन stack
के बराबर है, लेकिन मैं पढ़ रहा हूं कि एसटीएल कक्षाएं उप-वर्ग है। मुझे यह व्यवहार कैसे प्राप्त करना चाहिए?
मैं खोज एल्गोरिदम का एक सेट कार्यान्वित कर रहा हूं, इसलिए मुझे एडाप्टर के विशिष्ट क्रमिक व्यवहार की आवश्यकता है। (एलआईएफओ मुझे एक चौड़ाई पहली खोज देता है जबकि फीफो मुझे गहराई देता है, उदाहरण के लिए) –