2014-08-30 6 views
10

मैं जंग प्रोग्रामिंग भाषा देख रहा हूं और अपनी सी ++ सोच को जंग में बदलने की कोशिश कर रहा हूं। सामान्य डेटा संरचनाएं जैसे कि सूचियां और पेड़ और पहले सी ++ में पॉइंटर्स के साथ कार्यान्वित किया गया है, और मुझे यकीन नहीं है कि जंग में सटीक समकक्षों को कैसे कार्यान्वित किया जाए। जिन डेटा संरचनाओं में मुझे रूचि है उनमें घुसपैठ वाले एल्गोरिदम हैं, जो बूस्ट घुसपैठ पुस्तकालयों में पाए जाते हैं, और ये एम्बेडेड/सिस्टम प्रोग्रामिंग में उपयोगी हैं।जंग में घुसपैठ करने वाले एल्गोरिदम समकक्ष

जंग (सूची) में लिंक्ड सूची उदाहरण काफी सीधे आगे है, लेकिन यह एक कंटेनर प्रकार का उपयोग करता है जहां वास्तविक प्रकार कंटेनर के अंदर है। घुसपैठ करने वाला घुसपैठ करने वाला मैं चारों ओर दूसरी तरफ देख रहा हूं: आपके पास एक मुख्य प्रकार है जहां सूची नोड डाला गया है या विरासत में मिला है।

इसके अलावा, लिनक्स में प्रसिद्ध लिंक्ड सूची भी एक और उदाहरण है जहां सूची डेटा संरचनाओं के सदस्यों में है। यह घुसपैठ एल्गोरिदम के बूस्ट सदस्य संस्करण की तरह है। यह सक्षम बनाता है कि आप कई बार कई सूचियों/पेड़ों में अपने प्रकार का उपयोग करते हैं। यह जंग के साथ कैसे काम करेगा?

तो मुझे यकीन है कि इस प्रकार के डिज़ाइन पैटर्न को जंग में कैसे परिवर्तित किया जाए, जिसका उपयोग मैं सी/सी ++ में करता हूं। कोई भी जिसने इसे सफलता में समझ लिया था?

+0

मुझे उन प्रकार के डेटा संरचनाओं के साथ अधिक अनुभव नहीं है, लेकिन क्या आप उन लाभों को समझा सकते हैं जिन्हें आप उपयोग करके हासिल करना चाहते हैं? यदि मानक जंग संरचनाएं आपके उपयोग के मामलों में फिट नहीं होती हैं, तो शायद कुछ और होगा। – Shepmaster

+0

आप https://github.com/pcwalton/multilist को देखना चाहते हैं, जो एक घुसपैठ डेटास्ट्रक्चर लागू करता है। – awelkie

उत्तर

1

जंग चाहता है कि आप स्वामित्व और जीवनकाल के बारे में सोचें। सदस्यों का मालिक कौन है और वे कब तक रहेंगे?

डलिस्ट के प्रश्न में, उत्तर 'कंटेनर' है। घुसपैठ एल्गोरिदम के साथ कोई स्पष्ट जवाब नहीं है। एक सूची के सदस्यों को किसी अन्य सूची में पुन: उपयोग किया जा सकता है, जबकि अन्य पहली सूची के साथ नष्ट हो जाते हैं। आखिरकार, आप शायद संदर्भ गणना (std::sync::Arc) का उपयोग करना चाहते हैं।

1

मुझे लगता है कि जंग में ऐसा कुछ करने के दो तरीके हैं। चलिए ग्राफ के कार्यान्वयन पर एक नज़र डालें, जो आमतौर पर घुसपैठ लिंक का उपयोग करते हैं।

पहला दृष्टिकोण Rc<RefCell<Node>> पर निर्भर करता है। आप यहां अधिक जानकारी प्राप्त कर सकते हैं: Graphs and arena allocation

दूसरा दृष्टिकोण वेक्टर इंडेक्स पर निर्भर करता है। आप यहां अधिक जानकारी प्राप्त कर सकते हैं: Modeling Graphs in Rust Using Vector Indices

मेरा मानना ​​है कि दूसरा दृष्टिकोण बेहतर है, लेकिन मैंने कोई परीक्षण नहीं किया है।

संबंधित मुद्दे