ฉันพบคำถามที่เกี่ยวข้องกับการประกาศอาร์เรย์ที่มีขนาดต่างกัน สิ่งแรกที่อยู่ในใจของฉันคือฉันจะต้องใช้การจัดสรรแบบไดนามิกกับnew
คำสั่งเช่นนี้
while(T--) {
int N;
cin >> N;
int *array = new int[N];
// Do something with 'array'
delete[] array;
}
อย่างไรก็ตามฉันเห็นว่าหนึ่งในวิธีแก้ปัญหาอนุญาตกรณีดังต่อไปนี้:
while(T--) {
int N;
cin >> N;
int array[N];
// Do something with 'array'
}
หลังจากการวิจัยเล็กน้อยฉันอ่านว่า g ++ อนุญาตให้ทำสิ่งนี้ได้ แต่มันทำให้ฉันนึกถึงซึ่งในกรณีนี้จำเป็นต้องใช้การจัดสรรแบบไดนามิกหรือไม่ หรือว่าคอมไพเลอร์แปลว่าเป็นการจัดสรรแบบไดนามิกหรือไม่
ฟังก์ชั่นลบรวมอยู่ด้วย อย่างไรก็ตามโปรดทราบว่าคำถามในที่นี้ไม่เกี่ยวกับการรั่วไหลของหน่วยความจำ
new OBJ
โดยตรง
std::vector
แทน (std::vector<int> array(N);
)