موصى به, 2024

اختيار المحرر

الفرق بين صفيف الأبعاد (1D) و صفيف ثنائي الأبعاد (2D)

المصفوفة هي مجموعة من المتغيرات ذات أنواع البيانات المتشابهة ويتم إحالتها بواسطة اسم شائع. يتم الوصول إلى عنصر معين في صفيف بواسطة فهرس معين لهذا الصفيف. تعمل المصفوفات في Java بشكل مختلف بالمقارنة مع C ++. الموضوع الرئيسي لمناقشتنا هو الفرق بين صفيف البعد الواحد والبعد الثنائي. مصفوفة أحادية البعد هي قائمة من المتغيرات التي لها نفس نوع البيانات ، في حين أن المصفوفة ثنائية الأبعاد هي "صفيف المصفوفات" لها أنواع بيانات متشابهة. لا تحتوي C ++ على التحقق من المصفوفات في حين أن Java لها قيود دقيقة على المصفوفات.

لذلك دعونا نبدأ بالاختلافات بين مصفوفة One-dimension و Two-Dimension جنبًا إلى جنب مع مخطط المقارنة.

رسم بياني للمقارنة:

أساس للمقارنةذات بعد واحدثنائي الأبعاد
الأساسية
قم بتخزين قائمة واحدة من عناصر نوع بيانات مماثل.قم بتخزين قائمة "قوائم" أو "صفيف من المصفوفات" أو "صفيف من المصفوفات البعدية".
إعلان/ * تعريف في C ++
اكتب variable_name [size]؛ * /
/ * تعريف في Java
اكتب variable_name []؛
variable_name = نوع جديد [الحجم] ؛ * /
/ * تعريف في C ++
type variable_name [size1] [size2]؛ * /
/ * تعريف في Java
type variable_name = new int [size1] [size2]؛ * /
إعلان بديل/ * في Java
int [] a = new int [10]؛ * /
/ * في Java
int [] [] a = new int [10] [20]؛ * /
الحجم الإجمالي بالبايتإجمالي وحدات البايت = sizeof (نوع بيانات متغير الصفيف) * حجم الصفيف.إجمالي البايت = sizeof (نوع بيانات متغير الصفيف) * حجم الفهرس الأول * حجم الفهرس الثاني.
تلقي المعلمةيمكن استقباله في مصفوفة بحجم المؤشر أو الحجم أو صفيف غير مرغوب فيه.يجب أن تحدد المعلمة التي تستلمها البُعد في أقصى اليمين في مصفوفة.
الأبعادواحد البعد.ثنائي الأبعاد.

تعريف صفيف أحادي البعد (صفيف أحادي د)

تعتبر مصفوفة الأبعاد الواحدة أو أحادية البعد "قائمة متغيرات من أنواع البيانات المتشابهة" ، ويمكن الوصول إلى كل متغير بشكل واضح عن طريق تحديد فهرسته في أقواس مربعة مسبوقة باسم ذلك الصفيف.

في C ++ ، يكفي تعريف متغير صفيف بالحجم لتخصيص مساحة لهم في الذاكرة. في Java ، يتم تحقيق ذلك في خطوتين. أولاً ، يجب عليك تعريف متغير من النوع المطلوب. ثانيًا ، يجب تخصيص الذاكرة للاحتفاظ بالصفيف باستخدام "جديد" وتعيينه لمتغير الصفيف المُعلن. وبالتالي ، يتم تخصيص المصفوفات ديناميكيًا في Java.

دعونا نناقش في سياق C + +

 // declaration in C ++ type variable_name [size]؛ 

يحدد هذا النوع نوع بيانات متغير الصفيف ، ويحدد الحجم عدد العنصر الذي سيحتويه الصفيف.

على سبيل المثال ، إذا أردنا الإعلان عن صفيف يحتوي على رصيد كل شهر من السنة.

 // example int month_balance [12]؛ 

شهر _balance هو متغير الصفيف الذي سيحتوي على 12 أعداد صحيحة ، والتي ستمثل الرصيد من كل شهر. الآن ، إذا أردنا الوصول إلى رصيد الشهر "أبريل" ، فقد كان علينا ببساطة ذكر اسم المتغير متبوعًا بحامل مربع يحتوي على قيمة المؤشر لشهر أبريل ، أي "month_balance [3]". لكن "أبريل" هو الشهر الرابع من السنة ، لكننا ذكرنا "[3]" لأن جميع الصفائف لها 0 كمؤشر لعنصرها الأول.

في جافا ، يمكن أن يتم ذلك

 // declaration in Java type variable_name []؛ variable_name = نوع جديد [الحجم] ؛ 

في البداية ، أعلنا عن متغير صفيف بنوعه ، ثم خصصنا له الذاكرة باستخدام "جديد" والتعيين "الجديد" لمتغير الصفيف المُعلن. لنأخذ المثال أعلاه إذا أردنا الإعلان عن صفيف يحتوي على الرصيد في كل شهر من السنة.

 // example int month_balance []؛ month_balance = new int [12]؛ 

هنا ، يخصص "جديد" الذاكرة إلى متغير الصفيف "month_balance" ، لذلك الآن ، ستحتفظ mont_balance الآن بذاكرة لـ 12 عدد صحيح.

يمكن تهيئة الصفائف عندما يتم الإعلان عنها. مُهيئ الصفيف هو قائمة القيم المفصولة بفواصل التي تحيط بها الأقواس المتعرجة.
//مثال

 int month_balance = {100، 500، 200، 750، 850، 250، 630، 248، 790، 360، 450،180}؛ 

تعريف صفيف ثنائي الأبعاد (صفيف ثنائي الأبعاد)

كل من C ++ وجافا دعم مجموعة متعددة الأبعاد. واحدة من أبسط أشكال مجموعة متعددة الأبعاد هي صفيف ثنائي الأبعاد أو مصفوفة ثنائية الأبعاد. يمكن اعتبار المصفوفة ثنائية الأبعاد "صفيف من المصفوفات" أو "صفيف من المصفوفات أحادية البعد". ولإعلان متغير الصفيف ثنائي الأبعاد ، يتعين علينا تحديد اسم المصفوفة يليه قوسين مربعين حيث يكون الفهرس الثاني هو المجموعة الثانية من الأقواس المربعة.

يتم تخزين صفيف ثنائي الأبعاد في شكل مصفوفة عمود الصف ، حيث يشير الفهرس الأول إلى الصف ويوضح الفهرس الثاني العمود. يتغيّر الفهرس الثاني أو أقصى اليمين في المصفوفة بشكل سريع للغاية مقارنةً بالفهرس الأول أو الأيسر الأكثر أثناء الوصول إلى عناصر الصفيف.

في C ++ ، يتم تعريف الصفيف ثنائي الأبعاد كـ؛

 // declaration in C ++ type variable_name [size1] [size2]؛ 

على سبيل المثال ، نريد تخزين الرصيد كل 30 يومًا في كل شهر من السنة ، في صفيف ثنائي الأبعاد.

 // example int month_balance [12] [30]؛ 

في Java ، يتم الحصول على الصفيف ثنائي الأبعاد بواسطة

 // declaration in Java type variable_name = new int [size1] [size2]؛ // example int month_balance = new int [12] [30]؛ 

نظرًا لأننا لا نستطيع تمرير الصفيف بأكمله كمعلمة إلى دالة ، يتم تمرير المؤشر إلى العنصر الأول من الصفيف. يجب أن تحدد الحجة التي تستقبل المصفوفة ثنائية الأبعاد أنها البعد الصحيح. البعد الموجود في أقصى اليمين مطلوب لأن المحول البرمجي يحتاج إليه ، لتأكيد طول كل صف إذا أراد فهرسة المصفوفة بشكل صحيح. إذا لم يتم ذكر مؤشر أقصى اليمين ، لا يستطيع المترجم تحديد مكان بدء الصف التالي.

 // example in Java void receiveing_funct (int a [] [10]) {. . . } 

عندما يتم تخصيص الذاكرة بشكل ديناميكي إلى صفيف ثنائي الأبعاد في Java ، يتم تحديد الفهرس الأيسر ، ويمكن تخصيص الأبعاد المتبقية بشكل منفصل ، أي أن جميع صفوف الصفيف قد لا تكون بنفس الحجم.

 // example in Java int month_balance = new int [12] []؛ month_balance [0] = new int [31]؛ month_balance [1] = new int [28]؛ month_balance [2] = new int [31]؛ month_balance [3] = new int [30]؛ month_balance [4] = new int [31]؛ month_balance [5] = new int [30]؛ month_balance [6] = new int [31]؛ month_balance [7] = new int [30]؛ month_balance [8] = new int [31]؛ month_balance [9] = new int [30]؛ month_balance [10] = new int [31]؛ month_balance [11] = new int [30]؛ month_balance [12] = new int [31]؛ 

لكن لا توجد ميزة للقيام بذلك.

الاختلافات الأساسية بين صفيف أحادي الأبعاد و ثنائي الأبعاد

  1. المصفوفة أحادية البعد هي قائمة تكون عناصرها من نوع بيانات مماثل. من ناحية أخرى ، فإن المصفوفة ثنائية الأبعاد هي قائمة تكون عناصرها عبارة عن مصفوفة من نوع بيانات مماثل.
  2. في C ++ ، عندما يتم استلام صفيف أحادي البعد بواسطة معلمة دالة الاستلام ، ليس من الضروري ذكر حجم المصفوفة كما يفهم المحول البرمجي أن صفيف النوع (نوع البيانات المذكور مع المعلمة) مع بعض الطول هو أن يتم استلامها. في صفيف ثنائي الأبعاد ، يتم تحديد المؤشر الثاني أو أقصى اليمين كما يحتاج المحول البرمجي لمعرفة مكان نهاية صف واحد وبدء صف جديد.
  3. في C ++ ، يتم تخزين المصفوفة أحادية البعد في مكان مجاور للذاكرة في الترتيب المفهرس ، بينما يتم تخزين المصفوفة ثنائية الأبعاد أيضًا في موقع الذاكرة المتجاورة ، ولكن نظرًا لوجود صفوف متعددة في صفيف ثنائي الأبعاد ، يتم تخزين الصف الأول يتبعه الثاني والثالث وهكذا.

ملحوظة:

يتشابه مرور كل من الصفيف أحادي البعد وكذلك المصفوفة ثنائية الأبعاد إلى الدالة ، أي أن كلاهما يتم تمريرهما فقط باسم الصفيف

 // example pass_funt (name_of_array)؛ 

استنتاج:

في كل من مصفوفة ثنائية الأبعاد وثنائية الأبعاد ، يلعب المؤشر دورًا مهمًا للغاية لأنه هو الشيء الوحيد الذي يحدد عنصرًا في الصفيف بشكل خاص. يمكن تهيئة كلا مصفوفة أحادية البعد وذات بعدين في وقت إعلانها.

Top