तो, मुझे लगता है कि सी ++ में इसके लिए एक अच्छा, अंतर्निहित समाधान होना चाहिए, लेकिन मुझे यकीन नहीं है कि यह क्या है।सी ++: कई तत्वों के कुशल प्राप्त/पॉट के साथ कतार?
मुझे एक कतार की आवश्यकता है (आदर्श रूप से थ्रेड-सुरक्षित, लेकिन यदि आवश्यकता हो तो मैं सिंक्रनाइज़ेशन में इसे लपेट सकता हूं) जो कि बाइट्स के समूहों को कुशलता से संभालता है - विभिन्न आकारों के पढ़ने/लिखने की अनुमति देता है।
तो, इंटरफ़ेस उदा।
//removes the first bytesToRead elements from the front of the queue and places them in array; returns the actual number of bytes dequeued
int dequeue(unsigned char *array, int bytesToRead)
//Adds bytesToWrite elements from array to the end of the queue; does nothing and returns 0 if this would exceed the queue's max size
int enqueue(unsigned char *array, int bytesToWrite)
मैं एक अपने आप को बहुत अधिक कठिनाई के बिना लिख सकते हैं, लेकिन यह इस तरह लगता है कुछ है कि आसानी से शेल्फ से किया है होना चाहिए।
एसटीएल में सबसे अच्छी बात यह है कि यह एक स्ट्रिंगबफ हो सकता है - मुझे हाथ से sgetc/pubseekoff पर कॉल जोड़ना होगा, लेकिन ऐसा लगता है जैसे यह काम करेगा।
मैं वर्तमान कतार कार्यान्वयन के लिए ड्रॉप-इन प्रतिस्थापन के रूप में ऐसा करने के लिए देख रहा हूं जो एक प्रदर्शन समस्या है; इस कार्यान्वयन में पढ़ना कतार में डेटा की मात्रा पर ओ (एन) है। (यह एक बहुत भोली कार्यान्वयन है - कतार में शेष डेटा की एक सरणी कॉपी में हर विपंक्ति का परिणाम है।)
अतिरिक्त आवश्यकताएं (मैं एक आवरण में इन लागू कर सकते हैं यदि आवश्यकता हुई): करने के लिए सक्षम होने के लिए मैं जरूरत बफर -पढ़ें संचालन की एक अधिकतम आकार निर्दिष्ट करता है, तो कम डेटा उपलब्ध है की तुलना में लिखें संचालन कुछ नहीं करना है अनुरोध किया गया था यदि अनुरोध लिखने अधिकतम आकार से अधिक और वापसी होगी एक विफलता सूचक
तो सभी उपलब्ध डेटा पुनः प्राप्त करना चाहिए , मेरे प्रश्न: 1) स्ट्रिंगबफ पर्याप्त है? क्या बफर में डेटा की मात्रा के सापेक्ष पढ़ने/लिखने के संचालन ओ (1) हैं, मानते हैं कि कोई आकार बदलने की आवश्यकता नहीं है? (जाहिर है, वे संभावित रूप से अनुरोधित वस्तुओं की संख्या पर ओ (एन) होंगे।)
2) क्या कोई अन्य वर्ग है जिसे मैं नहीं देख रहा हूं जो पर्याप्त होगा?
अग्रिम धन्यवाद!
मुझे संदेह है कि जब तक कि आप एक लिंक्ड सूची के रूप में लागू कतार के माध्यम से बफर को पॉइंटर्स पास नहीं कर रहे हैं, तब तक डेटा को प्रतिलिपि बनाने के लिए आपको प्राप्त होने वाले किसी भी लाभ को कॉपी या आवंटित करने के अतिरिक्त ओवरहेड पर खो दिया जाएगा आप इसे enqueue। –
@ जोन: लगता है जैसे यह समस्या पर आधारित प्रतिलिपि तत्व नहीं है, लेकिन पूरे कतार को स्थानांतरित कर रहा है। बहुत सारे डेटा संरचनाएं हैं जो उससे बेहतर होती हैं। –
आह, ठीक है, मुझे ओपीएस विवरण से यह नहीं मिला। –