แนะนำ, 2024

ตัวเลือกของบรรณาธิการ

ความแตกต่างระหว่างอาร์เรย์หนึ่งมิติ (1D) และสองมิติ (2D)

อาร์เรย์คือชุดของตัวแปรที่เป็นชนิดข้อมูลที่คล้ายกันและถูกอ้างอิงโดยชื่อทั่วไป องค์ประกอบเฉพาะในอาร์เรย์เข้าถึงได้โดยดัชนีเฉพาะของอาร์เรย์นั้น อาร์เรย์ใน Java ทำงานแตกต่างกันเมื่อเทียบกับ C ++ หัวข้อหลักของการสนทนาของเราคือความแตกต่างระหว่างอาร์เรย์หนึ่งมิติและสองมิติ อาเรย์หนึ่งมิติคือรายการของตัวแปรที่มีประเภทข้อมูลเดียวกันในขณะที่อาเรย์สองมิติคือ 'อาเรย์ของอาร์เรย์' ที่มีชนิดข้อมูลที่คล้ายกัน C ++ ไม่มีการตรวจสอบขอบเขตในอาร์เรย์ในขณะที่ Java มีการตรวจสอบขอบเขตที่เข้มงวดในอาร์เรย์

ดังนั้นเรามาเริ่มด้วยความแตกต่างระหว่างอาเรย์หนึ่งมิติและสองมิติพร้อมกับกราฟเปรียบเทียบ

ตารางเปรียบเทียบ:

พื้นฐานสำหรับการเปรียบเทียบหนึ่งมิติสองมิติ
ขั้นพื้นฐาน
เก็บรายการองค์ประกอบเดียวในประเภทข้อมูลที่คล้ายกันจัดเก็บ 'รายการของรายการ' หรือ 'อาร์เรย์ของอาร์เรย์' หรือ 'อาร์เรย์ของมิติข้อมูลหนึ่งอาร์เรย์'
การประกาศ/ * ประกาศใน C ++
พิมพ์ variable_name [size]; * /
/ * ประกาศใน Java
พิมพ์ variable_name [];
variable_name = new type [size]; * /
/ * ประกาศใน C ++
พิมพ์ variable_name [size1] [size2]; * /
/ * ประกาศใน Java
พิมพ์ variable_name = new int [size1] [size2]; * /
การประกาศทางเลือก/ * ใน Java
int [] a = new int [10]; * /
/ * ใน Java
int [] [] a = new int [10] [20]; * /
ขนาดทั้งหมดเป็นไบต์จำนวนไบต์ทั้งหมด = sizeof (ชนิดข้อมูลของตัวแปรอาร์เรย์) * ขนาดของอาร์เรย์จำนวนไบต์ทั้งหมด = sizeof (ประเภทข้อมูลของตัวแปรอาร์เรย์) * ขนาดของดัชนีแรก * ขนาดของดัชนีที่สอง
รับพารามิเตอร์มันสามารถรับได้ในตัวชี้อาร์เรย์ขนาดหรืออาร์เรย์ที่ไม่ได้ระบุพารามิเตอร์ที่ได้รับจะต้องกำหนดมิติด้านขวาสุดของอาร์เรย์
ขนาดมิติเดียวสองมิติ

คำจำกัดความของอาร์เรย์หนึ่งมิติ (อาร์เรย์ 1 มิติ)

อาร์เรย์หนึ่งมิติหรือมิติเดียวถือเป็น "รายการของตัวแปรชนิดข้อมูลที่คล้ายกัน" และแต่ละตัวแปรสามารถเข้าถึงได้อย่างชัดเจนโดยการระบุดัชนีในวงเล็บเหลี่ยมนำหน้าด้วยชื่อของอาร์เรย์นั้น

ใน C ++ การประกาศของตัวแปรอาร์เรย์ที่มีขนาดเพียงพอที่จะจัดสรรพื้นที่สำหรับพวกเขาในหน่วยความจำ ใน Java สิ่งนี้สามารถทำได้สองขั้นตอน ก่อนอื่นคุณต้องประกาศตัวแปรประเภทที่ต้องการ ประการที่สองคุณต้องจัดสรรหน่วยความจำเพื่อเก็บอาร์เรย์โดยใช้ 'ใหม่' และกำหนดให้กับตัวแปรอาร์เรย์ที่ประกาศ ดังนั้นอาร์เรย์จะถูกจัดสรรแบบไดนามิกใน Java

มาพูดคุยกันในบริบท C ++

 // ประกาศใน C + + ประเภทตัวแปร _ ชื่อ [ขนาด]; 

ที่นี่ประเภทประกาศประเภทข้อมูลของตัวแปรอาร์เรย์และขนาดกำหนดจำนวนขององค์ประกอบที่อาร์เรย์จะถือ

ตัวอย่างเช่นถ้าเราต้องการประกาศอาร์เรย์ซึ่งจะมียอดคงเหลือของแต่ละเดือนของปี

 // ตัวอย่าง int month_balance [12]; 

Month _balance เป็นตัวแปรอาร์เรย์ซึ่งจะถือจำนวนเต็ม 12 จำนวนซึ่งจะแสดงยอดคงเหลือของแต่ละเดือน ตอนนี้ถ้าเราต้องการเข้าถึงยอดคงเหลือของเดือน 'เมษายน' เราก็ต้องพูดถึงชื่อตัวแปรตามด้วยเครื่องหมายวงเล็บเหลี่ยมที่มีค่าดัชนีสำหรับเดือนเมษายนนั่นคือ 'month_balance [3]' แต่เป็น 'เมษายน' เป็นเดือนที่สี่ของปี แต่เราได้กล่าวถึง '[3]' เพราะอาร์เรย์ทั้งหมดมี 0 เป็นดัชนีขององค์ประกอบแรกของพวกเขา

ใน Java สิ่งนี้สามารถทำได้

 // ประกาศใน Java type variable_name []; variable_name = new type [size]; 

ที่นี่เริ่มแรกเราได้ประกาศตัวแปรอาเรย์ด้วยประเภทของมันแล้วเราได้จัดสรรหน่วยความจำให้กับมันโดยใช้ 'ใหม่' และกำหนด 'ใหม่' ให้กับตัวแปรอาเรย์ที่ประกาศไว้ ลองมาตัวอย่างข้างต้นถ้าเราต้องการประกาศอาร์เรย์ซึ่งจะมียอดคงเหลือในแต่ละเดือนของปี

 // ตัวอย่าง int month_balance []; month_balance = new int [12]; 

ที่นี่ 'ใหม่' จัดสรรหน่วยความจำให้กับตัวแปรอาร์เรย์“ month_balance” ดังนั้นตอนนี้ mont_balance จะถือหน่วยความจำสำหรับค่าจำนวนเต็ม 12 ค่า

อาร์เรย์สามารถเริ่มต้นได้เมื่อมีการประกาศ array initializer คือรายการของค่าที่คั่นด้วยเครื่องหมายจุลภาคล้อมรอบด้วยเครื่องหมายปีกกา
//ตัวอย่าง

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

คำจำกัดความของอาร์เรย์สองมิติ (อาร์เรย์ 2 มิติ)

ทั้ง C ++ และ Java รองรับอาร์เรย์หลายมิติ หนึ่งในรูปแบบที่ง่ายที่สุดของอาเรย์หลายมิติคืออาเรย์สองมิติหรืออาเรย์ 2 มิติ อาร์เรย์สองมิติสามารถพิจารณาเป็น 'อาร์เรย์ของอาร์เรย์' หรือ 'อาร์เรย์ของอาร์เรย์หนึ่งมิติ' ในการประกาศตัวแปรอาเรย์สองมิติเราจะต้องระบุชื่ออาเรย์ตามด้วยวงเล็บเหลี่ยมสองตัวที่ดัชนีที่สองคือชุดที่สองของวงเล็บเหลี่ยม

อาร์เรย์สองมิติจะถูกจัดเก็บในรูปแบบของเมทริกซ์แถวคอลัมน์โดยที่ดัชนีแรกระบุว่าแถวและดัชนีที่สองระบุถึงคอลัมน์ ดัชนีที่สองหรือขวาสุดของอาร์เรย์เปลี่ยนแปลงอย่างรวดเร็วมากเมื่อเทียบกับดัชนีแรกหรือซ้ายสุดขณะที่เข้าถึงองค์ประกอบของอาร์เรย์

ใน C ++ อาร์เรย์สองมิติจะถูกประกาศเป็น;

 // ประกาศใน C ++ ประเภทตัวแปร _ ชื่อ [size1] [size2]; 

ตัวอย่างเช่นเราต้องการเก็บยอดคงเหลือทุกๆ 30 วันในแต่ละเดือนของปีในอาร์เรย์ 2 มิติ

 // ตัวอย่าง int month_balance [12] [30]; 

ใน Java อาร์เรย์สองมิติได้มาจาก

 // ประกาศใน Java ประเภทตัวแปร _ ชื่อ = ใหม่ int [size1] [size2]; // ตัวอย่าง int month_balance = new int [12] [30]; 

เนื่องจากเราไม่สามารถผ่านอาร์เรย์ทั้งหมดเป็นพารามิเตอร์ไปยังฟังก์ชันตัวชี้ไปยังองค์ประกอบแรกของอาร์เรย์จะถูกส่งผ่าน อาร์กิวเมนต์ที่ได้รับอาร์เรย์สองมิติจะต้องกำหนดว่าเป็นมิติที่เหมาะสมที่สุด ต้องใช้มิติด้านขวาสุดเนื่องจากคอมไพเลอร์ต้องการเพื่อยืนยันความยาวของแต่ละแถวหากต้องการทำดัชนีอาร์เรย์อย่างถูกต้อง หากไม่ได้กล่าวถึงดัชนีด้านขวาคอมไพเลอร์จะไม่สามารถกำหนดได้ว่าจะให้แถวถัดไปเริ่มต้นที่ใด

 // ตัวอย่างใน Java ถือเป็นโมฆะ receiveing_funct (int a [] [10]) { . . } 

เมื่อหน่วยความจำถูกจัดสรรแบบไดนามิกไปยังอาร์เรย์สองมิติใน Java ดัชนีซ้ายสุดจะถูกระบุและมิติที่เหลือสามารถจัดสรรแยกต่างหากเช่นแถวทั้งหมดของอาร์เรย์อาจไม่ได้มีขนาดเท่ากัน

 // ตัวอย่างใน 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 ++ อาร์เรย์หนึ่งมิติจะถูกเก็บไว้ในตำแหน่งหน่วยความจำต่อเนื่องในลำดับดัชนีในขณะที่อาร์เรย์สองมิติจะถูกเก็บไว้ในตำแหน่งหน่วยความจำต่อเนื่อง แต่เนื่องจากมีหลายแถวในอาร์เรย์สองมิติที่เก็บของ แถวแรกจะตามด้วยวินาทีและแถวที่สามเป็นต้น

บันทึก:

การส่งผ่านของทั้งสองอาร์เรย์หนึ่งมิติเช่นเดียวกับอาร์เรย์สองมิติไปยังฟังก์ชั่นที่คล้ายกันคือทั้งสองจะถูกส่งผ่านโดยชื่อของอาร์เรย์เท่านั้น

 // ตัวอย่างผ่าน pass_funt (name_of_array); 

สรุป:

ในอาเรย์ทั้งสองมิติและสองมิติดัชนีมีบทบาทที่สำคัญมากเพราะเป็นสิ่งเดียวที่ระบุองค์ประกอบในอาเรย์โดยเฉพาะ อาเรย์ทั้งสองมิติและสองมิติสามารถเริ่มต้นได้ ณ เวลาที่ประกาศ

Top