बंद-खुली श्रेणियों के माध्यम से रिवर्स-इट्रेटिंग के लिए अच्छी तरह से स्थापित "पैटर्न" निम्नानुसार है
// Iterate over [begin, end) range in reverse
for (iterator = end; iterator-- != begin; ) {
// Process `*iterator`
}
या, यदि आप चाहें,
// Iterate over [begin, end) range in reverse
for (iterator = end; iterator != begin; ) {
--iterator;
// Process `*iterator`
}
यह पैटर्न उपयोगी है, उदाहरण के लिए, एक अहस्ताक्षरित सूचकांक का उपयोग करके किसी सरणी को रिवर्स-इंडेक्स करने के लिए
int array[N];
...
// Iterate over [0, N) range in reverse
for (unsigned i = N; i-- != 0; ) {
array[i]; // <- process it
}
(इस पैटर्न से अपरिचित लोग अक्सर विशेष रूप से सरणी अनुक्रमण के लिए हस्ताक्षरित पूर्णांक प्रकारों का उपयोग करने पर जोर देते हैं क्योंकि वे गलत तरीके से मानते हैं कि अहस्ताक्षरित प्रकार रिवर्स अनुक्रमण के लिए किसी तरह "अनुपयोगी" हैं)
इसका उपयोग "स्लाइडिंग पॉइंटर" तकनीक का उपयोग करके एक सरणी पर पुनरावृत्ति के लिए किया जा सकता है
// Iterate over [array, array + N) range in reverse
for (int *p = array + N; p-- != array; ) {
*p; // <- process it
}
या इसे एक साधारण (रिवर्स नहीं) पुनरावृत्ति का उपयोग करके वेक्टर पर रिवर्स-इटरेशन के लिए उपयोग किया जा सकता है
for (vector<my_class>::iterator i = my_vector.end(); i-- != my_vector.begin(); ) {
*i; // <- process it
}