अस्थायी कंटेनरों के साथ रेंज पाइपलाइन लिखना
रेंज-v3 में, एक पाइपलाइन के साथ काम करते समय जो एक तृतीय-पक्ष फ़ंक्शन का उपयोग करता है जो रिटर्न देता है वेक्टर, एक ऐसी पाइपलाइन बनाना आवश्यक है जो रेंज के सभी तत्वों के लिए कार्य को मैप करती है और सभी परिणामी वैक्टर को उनके सभी तत्वों के साथ एक ही रेंज में समतल कर देती है।
प्रारंभ में, कोई इस तरह की पाइपलाइन लिखने का प्रयास कर सकता है जैसे:
auto rng = src | view::transform(f) | view::join;
हालाँकि, यह दृष्टिकोण पहले संभव नहीं था क्योंकि एफ द्वारा उत्पादित अस्थायी कंटेनरों के दृश्य बनाना असंभव है।
इस मुद्दे को संबोधित करने के लिए, एक पैच था पेश किया गया जो अब ऐसी रेंज पाइपलाइनों को सही ढंग से लिखने की अनुमति देता है। मुख्य बात view::cache1 ऑपरेटर को पाइपलाइन में जोड़ना है, जैसा कि निम्नलिखित उदाहरण में देखा गया है:
auto rng = views::iota(0, 4)
| views::transform([](int i) { return std::string(i, char('a' i)); })
| views::cache1
| views::join('-');
यह सुनिश्चित करता है कि पाइपलाइन अस्थायी कंटेनरों को सही ढंग से संसाधित करती है, जिससे हमें रेंज पाइपलाइन लिखने की अनुमति मिलती है जो अस्थायी कंटेनरों का प्रभावी ढंग से उपयोग करती है।
में वर्णित समस्या के लिए प्रश्न, समाधान पाइपलाइन को इस प्रकार संशोधित करना होगा:
auto rng = src | views::transform(f) | views::cache1 | views::join;
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3