آرایه های چند بعدی دینامیک (پویا) در C++
آرایه های دینامیک به آرایه هایی گفته می شود که اندازه ی انها در هنگام اجرا و به اندازه ی لازم مشخص می شوند. فرض کنید که یک بار که برنامه اجرا می شود به یک ارایه ی 30 عنصری احتیاج است و بار دیگری که برنامه اجرا می شود به یک آرایه 200 عنصری. در این صورت مشخص کردن اندازه ی آرایه به صورت ثابت کاری غیر حرفه ای است(!). در پست های قبل در مورد آرایه های دینامیک یک بعدی صحبت کرده بودیم، در این پست به سراغ ارایه های چند بعدی دینامیک می رویم.
یکی از روش های ایجاد یک آرایه های دینامیک چند بعدی، استفاده از آرایه های CLR است که در پست های قبل به آنها اشاره کرده بودیم. آرایه های CLR این قابلیت را دارند که اندازه ی آنها با یک متغیر تعیین شود. فرض کنید می خواهیم یک آرایه ی دو بعدی با ابعاد a و b ایجاد کنیم؛ با استفاده از آرایه های CLR این کار به سادگی امکان پذیر است. هر چند که آرایه های CLR تنها مختص محیط دات نت هستند.
array < int,2 >^ name = gcnew array < int,2 > (a,b);
با این کد خط برنامه یک آرایه ی دو بعدی به نام "name" از نوع صحیح (int) ایجاد کرده ایم که دارای ابعاد a و b است. چون a و b دو متغیر هستند در هر بار که برنامه اجرا شود ابعاد این آرایه متفاوت و بر اساس مقدار a و b خواهد بود.
آرایه های چند بعدی دینامیک بدون استفاده از C++/CLI :
برای ایجاد آرایه های های دینامیک چند روش وجود دارد. روش زیر یکی از آنها و بر اساس اشاره گر می باشد که در سایت CodeProject آموزش داده شده است. البته این روش به سادگی روش بالا نیست و در یک خط کد خلاصه نمی شود. ابتدا به کد که یک آرایه ی دو بعدی را ایجاد می کند، نگاهی می اندازیم.
آرایه های چند بعدی دینامیک بدون استفاده از C++/CLI :
برای ایجاد آرایه های های دینامیک چند روش وجود دارد. روش زیر یکی از آنها و بر اساس اشاره گر می باشد که در سایت CodeProject آموزش داده شده است. البته این روش به سادگی روش بالا نیست و در یک خط کد خلاصه نمی شود. ابتدا به کد که یک آرایه ی دو بعدی را ایجاد می کند، نگاهی می اندازیم.
int row, column;
int ** a = 0;
a = new int* [row];
for (int i=0; i < row; i++)
a[i] = new int [column];
}
خط اول کد، دو متغیر به نام های row و column تعریف کرده است که همانطور که از نامشان بر می اید اندازه ی ابعاد آرایه هستند. چون آرایه دو بعدی است، می توانید آن را به صورت یک ماتریس با (row) ردیف و (column) ستون تصور کنید. خط دوم اشاره گری با نام a را اعلان می کند که در ابتدا یک اشاره گر به یک اشره گر است. دقت کنید که دو بار از عملگر * استفاده شده است و نشان می دهد که a اشاره گری است که به یک اشاره دیگر اشاره می کند. (کمی گمراه کننده است!) در خط تعیین می شود که a آرایه ای با تعداد row است که هر کدام از خانه های آن خود یک اشاره گر است. خط دوم و سوم را می توان با هم ادغام کرد و مانند زیر به صورت یکجا نوشت.
int ** a = new int * [row];
این خط به یک باره a را اعلان می کند و آن را برابر آرایه ای با row خانه که از نوع اشاره گر هستند قرار می دهد. خط های بعدی کد که یک حلقه for هستند، دوباره مرحله اختصاص دادن اشاره گر به آرایه ای با تعداد column خانه را بر عهده دارند. در این حلقه تک تک خانه های a که از نوع اشاره گر بودند، به آرایه ای با تعداد column خانه اختصاص می یابند. در انتهای حلقه یک آرایه به نام a با تعداد row ردیف و column ستون در اختیار داریم.
با این روش اگر بخواهیم یک آرایه سه بعدی یا بیشتر ایجاد کنیم کمی کار پیچیده تر می شود. برای آرایه ی سه بعدی با ابعاد (Length,Width,Height) ابتدا باید یک آشاره گر به صورت زیر تعریف کنیم.
int*** a = new int ** [Length];
خط بالا آرایه ای از اشاره گر ها ایجاد می کند که هر کدام از خانه های آن اشاره گری به یک اشاره گر دیگر است. سپس به دو حلقه for یا while یا .. احتیاج داریم که ابتدا هر کدام خانه های این آرایه را با دستور new به ارایه ای با طول Width و سپس هر کدام از خانه های آن را مجددا به آرایه ای با طول Height اختصاص دهد.
برای اطلاعات کامل در این باره می توانید به سایت MSDN یا CodeProject مراجعه کنید که در زمینه برنامه نویسی از سایت های مرجع هستند. در پست های بعد روش های دیگری برای ایجاد آرایه های پویا را بررسی می کنیم.
+ نوشته شده در پنجشنبه بیست و نهم دی ۱۳۹۰ ساعت 16:58 توسط MEC
GENERAL INFORMATION