কীভাবে প্লেইন অ্যারেগুলির জন্য পরিসীমা ভিত্তিক?
এটি কি পড়তে হবে, " আমাকে বলুন একটি রেঞ্জ-ফর (অ্যারে সহ) কী করে? "
আমি এটি ধরে নিয়ে উত্তর দেব - নেস্টেড অ্যারেগুলি ব্যবহার করে নিম্নলিখিত উদাহরণটি ধরুন:
int ia[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
for (auto &pl : ia)
পাঠ্য সংস্করণ:
ia
অ্যারে সমন্বিত একটি অ্যারে ("নেস্টেড অ্যারে"), এতে [3]
প্রতিটি [4]
মান রয়েছে। উপরের উদাহরণটি ia
এটির প্রাথমিক 'ব্যাপ্তি' ( [3]
) দ্বারা লুপ করে, এবং তাই লুপগুলি [3]
বার করে। প্রতিটি লুপ এক উৎপন্ন ia
এর [3]
ধারণকারী একটি বিন্যাস - একটি প্রাথমিক মূল্যই প্রথম থেকে শুরু এবং শেষ দিয়ে শেষ [4]
মান।
- প্রথম লুপ:
pl
সমান {1,2,3,4}
- একটি অ্যারে
- দ্বিতীয় লুপ:
pl
সমান {5,6,7,8}
- একটি অ্যারে
- তৃতীয় লুপ:
pl
সমান {9,10,11,12}
- একটি অ্যারে
প্রক্রিয়াটি ব্যাখ্যা করার আগে এখানে অ্যারে সম্পর্কে কিছু বন্ধুত্বপূর্ণ অনুস্মারক রয়েছে:
- অ্যারেগুলি তাদের প্রথম মানটির নির্দেশক হিসাবে ব্যাখ্যা করা হয় - কোনও পুনরাবৃত্তি ছাড়াই অ্যারে ব্যবহার করা হলে প্রথম মানটির ঠিকানা ফেরত দেয়
pl
অবশ্যই একটি রেফারেন্স হতে হবে কারণ আমরা অ্যারেগুলি অনুলিপি করতে পারি না
- অ্যারে দিয়ে, আপনি অ্যারে বস্তুর নিজেই একটি সংখ্যা যোগ করুন, এটি এগিয়ে যে অনেক বার এবং 'পয়েন্ট' সমতুল্য এন্ট্রি এগিয়ে - যদি
n
প্রশ্নে সংখ্যা, তারপর ia[n]
হিসাবে একই *(ia+n)
(আমরা ঠিকানা থেকে যে dereferencing করছি n
এন্ট্রি এগিয়ে) এবং ia+n
এটি একই &ia[n]
(আমরা অ্যারেতে প্রবেশের ঠিকানা পাচ্ছি)।
যা চলছে তা এখানে:
- প্রতিটি লুপ উপর,
pl
হিসেবে সেট করা হয় রেফারেন্স করার ia[n]
সঙ্গে, n
বর্তমান লুপ গণনা 0. সুতরাং থেকে শুরু equaling, pl
হয় ia[0]
দ্বিতীয় এটা উপর, প্রথম রাউন্ড উপর ia[1]
, ইত্যাদি। এটি পুনরাবৃত্তির মাধ্যমে মানটি পুনরুদ্ধার করে।
- লুপটি যতটা
ia+n
কম যায় ততক্ষণ যায় end(ia)
।
... এবং এটি প্রায়।
এটি সত্যিই এটি লেখার সহজ সরল উপায় :
int ia[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
for (int n = 0; n != 3; ++n)
auto &pl = ia[n];
যদি আপনার অ্যারে বাসা বাঁধে না , তবে এই প্রক্রিয়াটি কিছুটা সহজ হয়ে যায় যাতে রেফারেন্সের প্রয়োজন হয় না , কারণ পুনরাবৃত্ত মানটি একটি অ্যারে নয় বরং 'সাধারণ' মান:
int ib[3] = {1,2,3};
for (auto pl : ib)
cout << pl;
for (int n = 0; n != 3; ++n)
cout << ib[n];
কিছু অতিরিক্ত তথ্য
কী auto
তৈরি করার সময় আমরা কীওয়ার্ডটি ব্যবহার করতে চাই না pl
? দেখতে কেমন লাগবে?
নিম্নলিখিত উদাহরণে, pl
একটি উল্লেখ করে array of four integers
। প্রতিটি লুপের উপর pl
মান দেওয়া হয় ia[n]
:
int ia[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
for (int (&pl)[4] : ia)
এবং ... কোনও বিভ্রান্তি দূর করার জন্য অতিরিক্ত তথ্য সহ এটি এটি কাজ করে। এটি কেবলমাত্র একটি 'শর্টহ্যান্ড' for
লুপ যা স্বয়ংক্রিয়ভাবে আপনার জন্য গণনা করা হয়, তবে বর্তমান লুপটি ম্যানুয়ালি না করে পুনরুদ্ধার করার উপায়ের অভাব রয়েছে।
for
। কিন্তু যে মুহুর্তে অ্যারে কোনও পয়েন্টারের সাথে সিদ্ধান্ত নেয়, আকারের তথ্যটি হারিয়ে যায়।