परिचय: C++ में टास्क क्यू की ज़रूरत क्यों?
\nकल्पना कीजिए कि आप सुपरमार्केट के कैश काउंटर पर लाइन में खड़े हैं। जो पहले आया, उसे पहले सर्विस मिलती है। प्रोग्रामिंग में इसी स्ट्रक्चर को क्यू (queue) कहते हैं। यह एक बुनियादी डेटा टाइप है जो FIFO (First In, First Out) सिद्धांत पर काम करता है – "पहले आया, पहले गया"।
\nC++ में टास्क क्यू का उपयोग हर जगह होता है: नेटवर्क रिक्वेस्ट प्रोसेस करने से लेकर मल्टीथ्रेडेड एप्लिकेशन में थ्रेड मैनेज करने तक। शुरुआती प्रोग्रामर के लिए क्यू को समझना एडवांस टॉपिक्स जैसे एसिंक्रोनस प्रोग्रामिंग और डिज़ाइन पैटर्न सीखने की दिशा में एक कदम है।
\nइस आर्टिकल में हम C++ में क्यू बनाना और उपयोग करना सीखेंगे, स्टैंडर्ड कंटेनर std::queue को समझेंगे, कई प्रैक्टिकल उदाहरण लिखेंगे और शुरुआती लोगों की सामान्य गलतियों पर चर्चा करेंगे।
क्यू की बेसिक्स: थ्योरी और पहला उदाहरण
\nक्यू क्या है?
\nक्यू एक एब्सट्रैक्ट डेटा टाइप है जो दो मुख्य ऑपरेशन सपोर्ट करता है:
\n- \n
- एलिमेंट जोड़ना क्यू के अंत में (enqueue / push); \n
- एलिमेंट निकालना क्यू की शुरुआत से (dequeue / pop). \n
C++ में स्टैंडर्ड क्यू हेडर फ़ाइल <queue> में std::queue क्लास के रूप में उपलब्ध है। डिफ़ॉल्ट रूप से यह std::deque को बेस कंटेनर के रूप में उपयोग करता है, लेकिन आप इसे std::list से भी बदल सकते हैं।
पहला उदाहरण: नंबरों की क्यू
\nचलिए एक सरल प्रोग्राम लिखते हैं जो इंटिजर की क्यू बनाता है, उसमें कुछ वैल्यू जोड़ता है और उन्हें स्क्रीन पर दिखाता है।
\n#include <iostream>\n#include <queue>\n\nint main() {\n std::queue<int> my_queue;\n\n // क्यू में एलिमेंट जोड़ना\n my_queue.push(10);\n my_queue.push(20);\n my_queue.push(30);\n\n std::cout << "पहला एलिमेंट (front): " << my_queue.front() << std::endl;\n std::cout << "आखिरी एलिमेंट (back): " << my_queue.back() << std::endl;\n std::cout << "क्यू का साइज़: " << my_queue.size() << std::endl;\n\n // एलिमेंट निकालना\n while (!my_queue.empty()) {\n std::cout << "निकाला गया: " << my_queue.front() << std::endl;\n my_queue.pop();\n }\n\n return 0;\n}\nप्रोग्राम का आउटपुट:
\nपहला एलिमेंट (front): 10\nआखिरी एलिमेंट (back): 30\nक्यू का साइज़: 3\nनिकाला गया: 10\nनिकाला गया: 20\nनिकाला गया: 30\nध्यान दें: front() पहला एलिमेंट लौटाता है (जो अगला निकाला जाएगा), और back() सबसे आखिर में जोड़ा गया एलिमेंट लौटाता है। pop() मेथड एलिमेंट को हटाता है लेकिन उसे लौटाता नहीं – यह याद रखना ज़रूरी है!
std::queue के मुख्य मेथड
\nक्यू के साथ प्रभावी ढंग से काम करने के लिए इसके सभी मेथड जानना ज़रूरी है। यहाँ पूरी लिस्ट है:
\n- \n
push(const T& value)– क्यू के अंत में एलिमेंट जोड़ता है; \n pop()– पहला एलिमेंट हटाता है (इसे लौटाता नहीं); \n front()– पहले एलिमेंट का रेफरेंस लौटाता है; \n back()– आखिरी एलिमेंट का रेफरेंस लौटाता है; \n empty()– जाँचता है कि क्यू खाली है या नहीं (true/false लौटाता है); \n size()– एलिमेंट की संख्या लौटाता है। \n
महत्वपूर्ण: front() या pop() कॉल करने से पहले हमेशा empty() से जाँच करें कि क्यू खाली तो नहीं है। खाली क्यू के एलिमेंट तक पहुँचने की कोशिश करने से अनिर्धारित व्यवहार होगा (संभवतः प्रोग्राम क्रैश हो जाएगा)।
प्रैक्टिकल उदाहरण: टास्क क्यू
\nअब एक वास्तविक स्थिति को मॉडल करते हैं। मान लीजिए हमारे पास एक सिस्टम है जो ऑर्डर प्रोसेस करता है। हर ऑर्डर एक स्ट्रक्चर है जिसमें नंबर और विवरण होता है। हम ऑर्डर को क्यू में डालते हैं।