คำถามติดแท็ก dynamic-arrays

7
C อาร์เรย์ที่เติบโตแบบไดนามิก
ฉันมีโปรแกรมที่อ่านรายการเอนทิตีในเกม "ดิบ" และฉันตั้งใจจะสร้างอาร์เรย์ที่มีหมายเลขดัชนี (int) ของเอนทิตีที่ไม่แน่นอนสำหรับการประมวลผลสิ่งต่างๆ ฉันต้องการหลีกเลี่ยงการใช้หน่วยความจำหรือ CPU มากเกินไปในการรักษาดัชนีดังกล่าว ... วิธีแก้ปัญหาที่รวดเร็วและสกปรกที่ฉันใช้จนถึงตอนนี้คือการประกาศในฟังก์ชันการประมวลผลหลัก (โฟกัสเฉพาะที่) อาร์เรย์ที่มีขนาดของเอนทิตีเกมสูงสุดและจำนวนเต็มอื่นเพื่อติดตามจำนวนที่ถูกเพิ่มเข้าไปในรายการ สิ่งนี้ไม่น่าพอใจเนื่องจากทุกรายการมีอาร์เรย์มากกว่า 3,000 รายการซึ่งไม่มากนัก แต่รู้สึกว่าเป็นการสิ้นเปลืองเนื่องจากฉันจะใช้วิธีแก้ปัญหาได้ 6-7 รายการสำหรับฟังก์ชันที่แตกต่างกัน ฉันไม่พบโซลูชันเฉพาะ C (ไม่ใช่ C ++ หรือ C #) เพื่อให้บรรลุสิ่งนี้ ฉันสามารถใช้พอยน์เตอร์ได้ แต่ฉันค่อนข้างกลัวที่จะใช้มัน (เว้นแต่จะเป็นวิธีเดียวที่เป็นไปได้) อาร์เรย์จะไม่ออกจากขอบเขตฟังก์ชันโลคัล (จะถูกส่งต่อไปยังฟังก์ชันจากนั้นจึงละทิ้ง) ในกรณีที่มีการเปลี่ยนแปลงสิ่งต่างๆ หากพอยน์เตอร์เป็นทางออกเดียวฉันจะติดตามสิ่งเหล่านี้เพื่อหลีกเลี่ยงการรั่วไหลได้อย่างไร
126 c  dynamic-arrays 

8
ฉันจะหาอาร์เรย์ว่างขนาดใดก็ได้ใน python ได้อย่างไร
โดยทั่วไปฉันต้องการ python เทียบเท่ากับสิ่งนี้ใน C: int a[x]; แต่ใน python ฉันประกาศอาร์เรย์เช่น: a = [] และปัญหาคือฉันต้องการกำหนดช่องสุ่มด้วยค่าเช่น: a[4] = 1 แต่ฉันไม่สามารถทำได้ด้วย python เนื่องจากอาร์เรย์ว่างเปล่า

11
ฉันจะเพิ่มรายการในอาร์เรย์ Java แบบไดนามิกได้อย่างไร
ใน PHP คุณสามารถเพิ่มองค์ประกอบในอาร์เรย์แบบไดนามิกได้ดังต่อไปนี้: $x = new Array(); $x[] = 1; $x[] = 2; หลังจากนี้จะเป็นอาร์เรย์เช่นนี้$x{1,2} มีวิธีทำคล้าย ๆ กันใน Java หรือไม่?

3
การเพิ่มตัวชี้ไปยังอาร์เรย์ไดนามิกขนาด 0 ไม่ได้กำหนดไว้หรือไม่
AFAIK แม้ว่าเราจะไม่สามารถสร้างอาร์เรย์หน่วยความจำคงที่ขนาด 0 แต่เราสามารถทำได้ด้วยไดนามิก: int a[0]{}; // Compile-time error int* p = new int[0]; // Is well-defined อย่างที่ฉันได้อ่านpทำหน้าที่เหมือนองค์ประกอบสุดท้ายที่จบแล้ว ฉันสามารถพิมพ์ที่อยู่ที่pชี้ไปได้ if(p) cout << p << endl; แม้ว่าฉันจะแน่ใจว่าเราไม่สามารถอ้างถึงตัวชี้ (องค์ประกอบสุดท้ายที่ผ่านมา) เนื่องจากเราไม่สามารถใช้ตัววนซ้ำ (องค์ประกอบที่ผ่านมา) แต่สิ่งที่ฉันไม่แน่ใจคือการเพิ่มตัวชี้นั้นpหรือไม่ พฤติกรรมที่ไม่ได้กำหนด (UB) เหมือนกับตัววนซ้ำหรือไม่ p++; // UB?

1
ตัวชี้ทางคณิตศาสตร์ในหน่วยเก็บข้อมูลที่จัดสรรอนุญาตตั้งแต่ C ++ 20 หรือไม่
ใน C ++ 20 มาตรฐานมันก็บอกว่าประเภทอาร์เรย์เป็นประเภทอายุการใช้งานโดยปริยาย หมายความว่าอาเรย์สำหรับประเภทอายุการใช้งานที่ไม่แน่นอนสามารถสร้างได้หรือไม่? การสร้างอาเรย์โดยนัยจะไม่ทำให้เกิดการสร้างองค์ประกอบของอาเรย์? พิจารณากรณีนี้: //implicit creation of an array of std::string //but not the std::string elements: void * ptr = operator new(sizeof (std::string) * 10); //use launder to get a "pointer to object" (which object?) std::string * sptr = std::launder(static_cast<std::string*>(ptr)); //pointer arithmetic on not created array …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.