Rumah > Artikel > pembangunan bahagian belakang > Bagaimanakah `std::vector` Mengendalikan Agihan Semula Tatasusunan Dinamik dalam C ?
Peruntukan Semula dalam C : Meneroka std::vector Solution
Dalam C , ketiadaan fungsi realloc eksplisit mungkin menimbulkan kebimbangan apabila anda perlu mengembangkan penimbal dinamik. Walau bagaimanapun, kelas templat std::vector menyediakan penyelesaian yang mudah dan cekap untuk masalah ini.
Memahami Alokasi Semula
Peruntukan Semula melibatkan pelarasan saiz blok memori yang diperuntukkan sebelum ini . Dalam C , ini dicapai melalui fungsi realloc. Walau bagaimanapun, C memperkenalkan kelas std::vector, yang menguruskan tatasusunan dinamik dan menawarkan kaedah yang lebih mudah dan selamat untuk pengagihan semula.
Menggunakan std::vector untuk Penempatan Semula
Untuk memperuntukkan tatasusunan n elemen dengan nilai awal ditetapkan kepada 0, anda biasanya akan gunakan:
Type* t = (Type*)malloc(sizeof(Type)*n); memset(t, 0, sizeof(Type)*m);
Dengan std::vector, ini boleh dipermudahkan kepada:
std::vector<Type> t(n, 0);
Untuk membesarkan tatasusunan untuk menampung elemen n2, anda akan menggunakan:
t = (Type*)realloc(t, sizeof(Type) * n2);
Dengan std::vector, ini dicapai oleh:
t.resize(n2);
Melalukan Penunjuk kepada Fungsi
Apabila menghantar penunjuk kepada fungsi, anda boleh menggunakan &t[0] dan bukannya t. Ini sah kerana std::vector menyokong penggunaan elemennya sebagai penunjuk kepada tatasusunan asas.
Foo(&t[0])
Kesimpulan
Dengan menggunakan std::vector, anda boleh mengagihkan semula memori dinamik dengan mudah dan selamat dalam C . Ini menghapuskan keperluan untuk pengurusan memori yang jelas, menjadikan kod anda lebih ringkas dan kurang terdedah kepada ralat.
Atas ialah kandungan terperinci Bagaimanakah `std::vector` Mengendalikan Agihan Semula Tatasusunan Dinamik dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!