সাধারণত, আয়ররেটরগুলি রৈখিক ফ্যাশনে ধারকগুলির উপাদানগুলি অ্যাক্সেস করতে ব্যবহৃত হয়; তবে, "এলোমেলো অ্যাক্সেস পুনরায়" দিয়ে, একই ফ্যাশনে যে কোনও উপাদান অ্যাক্সেস করা সম্ভব operator[]
।
করার একটি ভেক্টর অ্যাক্সেস নির্বিচারে উপাদান vec
, আপনি নিম্নলিখিত ব্যবহার করতে পারেন:
vec.begin() // 1st
vec.begin()+1 // 2nd
// ...
vec.begin()+(i-1) // ith
// ...
vec.begin()+(vec.size()-1) // last
নিম্নলিখিতটি একটি অ্যাক্সেস প্যাটার্নের একটি উদাহরণ (সি ++ এর পূর্ববর্তী সংস্করণ):
int sum = 0;
using Iter = std::vector<int>::const_iterator;
for (Iter it = vec.begin(); it!=vec.end(); ++it) {
sum += *it;
}
পুনরুক্তিকারী ব্যবহারের সুবিধা হ'ল আপনি অন্যান্য পাত্রে একই প্যাটার্ন প্রয়োগ করতে পারেন :
sum = 0;
for (Iter it = lst.begin(); it!=lst.end(); ++it) {
sum += *it;
}
এই কারণে, টেম্পলেট কোড তৈরি করা সত্যই সহজ যা ধারক প্রকার নির্বিশেষে একই কাজ করবে । পুনরাবৃত্তির আরেকটি সুবিধা হ'ল এটি ধরে নেই যে ডেটা মেমরির বাসিন্দা; উদাহরণস্বরূপ, কেউ একটি ফরোয়ার্ড ইটারেটর তৈরি করতে পারে যা কোনও ইনপুট স্ট্রিম থেকে ডেটা পড়তে পারে, বা এটি ফ্লাইতে ডেটা উত্পন্ন করে (যেমন একটি পরিসর বা এলোমেলো সংখ্যা জেনারেটর)।
std::for_each
ল্যাম্বডাস ব্যবহার করে আর একটি বিকল্প :
sum = 0;
std::for_each(vec.begin(), vec.end(), [&sum](int i) { sum += i; });
যেহেতু সি ++ 11 আপনি auto
পূর্বে দেখানো (বা আরও জটিল) এর পুনরাবৃত্তির খুব দীর্ঘ, জটিল ধরণের নাম নির্দিষ্ট করে এড়াতে ব্যবহার করতে পারেন :
sum = 0;
for (auto it = vec.begin(); it!=vec.end(); ++it) {
sum += *it;
}
এবং, উপরন্তু, প্রতিটি বৈকল্পিক জন্য একটি সহজ আছে:
sum = 0;
for (auto value : vec) {
sum += value;
}
এবং অবশেষে এমনও রয়েছে std::accumulate
যেখানে আপনাকে পূর্ণসংখ্যা বা ভাসমান পয়েন্ট সংখ্যা যুক্ত করা হচ্ছে কিনা সে বিষয়ে আপনাকে সতর্কতা অবলম্বন করতে হবে।