बूस्ट के साथ रिवर्स रेंज-बेस्ड फॉर लूप
रिवर्स रेंज-बेस्ड फॉर लूप प्राप्त करने के लिए, हमने बूस्ट लाइब्रेरी का उपयोग किया है। यह बूस्ट लाइब्रेरी बहुत लोकप्रिय है और इसमें कुछ मजबूत कार्यक्षमताएं हैं।
यहां हम कुछ ऐरे या कंटेनर्स का उपयोग कर सकते हैं, फिर boost::adaptors::reverse() का उपयोग करके रेंज-बेस्ड फॉर लूप को रिवर्स ऑर्डर में उपयोग कर सकते हैं।
उदाहरण
#include <list>
#include <iostream>
#include <boost/range/adaptor/reversed.hpp>
using namespace std;
int main() {
std::list<int> x {11, 44, 77, 55, 44, 22, 33, 30, 88, 99, 55, 44};
cout << "Normal Loop" << endl;
for (auto i : x)
std::cout << i << '\n';
cout << "Reversed Loop" << endl;
for (auto i : boost::adaptors::reverse(x))
std::cout << i << '\n';
return 0;
}
आउटपुट
Normal Loop 11 44 77 55 44 22 33 30 88 99 55 44 Reversed Loop 44 55 99 88 30 33 22 44 55 77 44 11
बूस्ट के बिना विकल्प (स्टैंडर्ड C++)
1. रिवर्स इटरेटर्स का उपयोग करना (C++98 से)
for (auto it = x.rbegin(); it != x.rend(); ++it) {
cout << *it << '\n';
}
2. इंडेक्स-आधारित लूप (रैंडम-एक्सेस कंटेनर्स के लिए)
vectorv = {1, 2, 3, 4, 5}; for (size_t i = v.size(); i-- > 0; ) { cout << v[i] << '\n'; }
3. C++20: ranges::views::reverse
#include <ranges>
#include <vector>
#include <iostream>
int main() {
vector v = {1, 2, 3, 4, 5};
for (int i : v | std::views::reverse) {
cout << i << '\n';
}
}
4. हेल्पर फ़ंक्शन (प्री-C++20)
template <typename Container>
auto reverse_iterate(Container& c) {
struct Iterator {
typename Container::reverse_iterator it;
bool operator!=(const Iterator& other) const { return it != other.it; }
auto operator*() const { return *it; }
Iterator& operator++() { ++it; return *this; }
};
return Iterator{c.rbegin()}, Iterator{c.rend()};
}
// उपयोग:
for (auto& elem : reverse_iterate(vec)) { ... }
बूस्ट एडाप्टर के लाभ
- किसी भी बिडायरेक्शनल रेंज के साथ काम करता है
- कॉपी नहीं बनाता (लेजी व्यू)
- रेंज-बेस्ड फॉर सिंटैक्स के साथ संगत
- अन्य बूस्ट एडाप्टर्स के साथ कंपोज़ेबल (फिल्टर, ट्रांसफॉर्म, आदि)
आवश्यक हेडर
#include <boost/range/adaptor/reversed.hpp> // या संपूर्ण एडाप्टर्स के लिए: #include <boost/range/adaptors.hpp>