क्या सी ++ एसटीएल में ढेर अंतर्निहित कंटेनर के किसी भी इटरेटर का पर्दाफाश करता है या क्या मुझे उस कंटेनर का सीधे उपयोग करना चाहिए?क्या std :: stack iterators का पर्दाफाश करता है?
29
A
उत्तर
34
स्टैक में स्टैक की परिभाषा के अनुसार इटरेटर नहीं हैं। यदि आपको इटरेटर के साथ ढेर की आवश्यकता है, तो आपको इसे अन्य कंटेनर (std :: list, std :: vector, आदि) के शीर्ष पर लागू करने की आवश्यकता होगी। Stack doc is here।
पीएस एक टिप्पणी के अनुसार मैं इराइंबिलानजा से मिला, std :: स्टैक डिफ़ॉल्ट रूप से कार्यान्वयन के लिए std :: डेक का उपयोग करता है।
1
10
यदि आपको इटरेटर के साथ एक स्टैक की आवश्यकता है, तो आपके पास दो विकल्प हैं। push_back(), pop_back() का उपयोग कर std :: वेक्टर। std :: डेक या तो push_back()/pop_back() या push_front()/pop_front() के साथ।
0
std::stack
अपने अंतर्निहित कंटेनर (और इसलिए इटरेटर) को अपने संरक्षित इंटरफ़ेस के माध्यम से सबक्लास पर खुलासा करता है। इसलिए यदि आप उन्हें एक्सेस करना चाहते हैं तो आप std::stack
को थोड़ा बढ़ा सकते हैं।
template<typename T, typename Container = std::deque<T>>
class iterable_stack
: public std::stack<T, Container>
{
using std::stack<T, Container>::c;
public:
// expose just the iterators of the underlying container
auto begin() { return std::begin(c); }
auto end() { return std::end(c); }
auto begin() const { return std::begin(c); }
auto end() const { return std::end(c); }
};
int main()
{
iterable_stack<int> st;
st.push(2);
st.push(5);
st.push(3);
st.push(7);
st.push(9);
for(auto i: st)
std::cout << i << ' ';
std::cout << '\n';
}
आउटपुट:
2 5 3 7 9
संबंधित मुद्दे
- 1. std :: for_each iterators
- 2. std :: pair में iterators क्यों नहीं है?
- 3. रूबी प्रतीकों का पर्दाफाश क्यों करता है?
- 4. Iterators
- 5. दो iterators
- 6. समझौता Iterators
- 7. क्यों std :: दूरी कॉन्स और nonconst iterators के मिश्रण पर काम नहीं करता है?
- 8. मैं कंटेनर का पर्दाफाश किए बिना इटरेटर का पर्दाफाश कैसे कर सकता हूं?
- 9. संकलित नक्शा iterators का उपयोग कर त्रुटि
- 10. क्या संपत्ति में एक आईनेमरेबल का पर्दाफाश करना सुरक्षित है?
- 11. क्या एन्कोडिंग std :: string.c_str() का उपयोग करता है?
- 12. क्या std :: make_shared() कस्टम आवंटकों का उपयोग करता है?
- 13. gcc -mpreferred-stack-border विकल्प
- 14. std :: vector (iterators के बिना) को पुन: सक्रिय करते समय किस प्रकार का उपयोग करना है?
- 15. वेक्टर Iterators
- 16. एसटीएल का std :: स्ट्रिंग हिस्सा है?
- 17. क्या std :: vector :: डेटा() चलकर संरक्षित है?
- 18. क्या स्टेटस आवंटकों के साथ std :: vector :: swap() चाहिए सभी iterators अवैध?
- 19. std :: char_traits :: असाइन() का उद्देश्य क्या है?
- 20. क्या std :: cout का रिटर्न वैल्यू है?
- 21. मैं std :: ifstreams का std :: स्टैक क्यों नहीं बना सकता?
- 22. जावा - Iterators का उपयोग कब करें?
- 23. std :: pair क्या है?
- 24. Std :: safe_string क्या है?
- 25. std :: फ्लश कैसे काम करता है?
- 26. Struts 2 नेस्टिंग iterators
- 27. std :: string इस चाल का प्रबंधन कैसे करता है?
- 28. std :: map iterator कैसे काम करता है?
- 29. क्यों std :: queue स्पष्ट() फ़ंक्शन का समर्थन नहीं करता है?
- 30. अजगर iterators उपज
+1। ध्यान दें कि डिफ़ॉल्ट रूप से std :: stack std :: deque को इसके कार्यान्वयन के रूप में उपयोग करता है, इसलिए यह एक iterstack के डिफ़ॉल्ट कार्यान्वयन के लिए भी एक अच्छा विकल्प हो सकता है। एक और सवाल यह है कि, * क्यों * आप एक हड़ताली ढेर चाहते हैं और नहीं, एक सीधे डेक –
10x, मुझे नहीं पता था कि – Drakosha