Apa perbedaan antara array dan vektor di C ++? Contoh perbedaan mungkin termasuk perpustakaan, simbolisme, kemampuan, dll.
Himpunan
Array berisi sejumlah elemen dari tipe tertentu. Agar kompilator dapat mencadangkan jumlah ruang yang diperlukan saat program dikompilasi, Anda harus menentukan jenis dan jumlah elemen yang akan dimuat dalam larik saat ia didefinisikan. Kompilator harus dapat menentukan nilai ini saat program dikompilasi. Setelah sebuah array ditentukan, Anda menggunakan pengenal untuk array tersebut bersama dengan indeks untuk mengakses elemen tertentu dari array tersebut. [...] array diindeks nol; Artinya, elemen pertama ada di indeks 0. Skema pengindeksan ini menunjukkan hubungan dekat dalam C ++ antara pointer dan array dan aturan yang ditentukan oleh bahasa untuk aritmatika pointer.
- Referensi Saku C ++
Vektor
Vektor adalah urutan objek berukuran dinamis yang menyediakan
operator[]
akses acak bergaya array . Fungsi anggotapush_back
menyalin argumennya melalui konstruktor salinan, menambahkan salinan itu sebagai item terakhir dalam vektor dan menambah ukurannya satu per satu.pop_back
melakukan kebalikannya, dengan menghapus elemen terakhir. Memasukkan atau menghapus item dari akhir vektor membutuhkan waktu konstan diamortisasi, dan memasukkan atau menghapus dari lokasi lain membutuhkan waktu linier. Ini adalah dasar dari vektor. Ada lebih banyak dari mereka. Dalam kebanyakan kasus, vektor harus menjadi pilihan pertama Anda di atas larik gaya C. Pertama-tama, ukurannya dinamis, yang berarti dapat tumbuh sesuai kebutuhan. Anda tidak perlu melakukan segala macam penelitian untuk mengetahui ukuran statis yang optimal, seperti dalam kasus array C; vektor tumbuh sesuai kebutuhan, dan dapat diubah ukurannya lebih besar atau lebih kecil secara manual jika perlu. Kedua, vektor menawarkan pemeriksaan batas denganat
fungsi anggota (tetapi tidak denganoperator[]
), sehingga Anda dapat melakukan sesuatu jika Anda mereferensikan indeks yang tidak ada alih-alih hanya menonton program Anda macet atau lebih buruk lagi, melanjutkan eksekusi dengan data yang rusak.- Buku Resep C ++
Jawaban:
array:
malloc
);sizeof
(karena itu idiom umumsizeof(arr)/sizeof(*arr)
, yang gagal diam-diam saat digunakan secara tidak sengaja pada pointer);std::vector
:&vec[0]
dijamin bekerja seperti yang diharapkan);begin()
/end()
metode, STL biasatypedef
, ...)Juga pertimbangkan "alternatif modern" untuk array -
std::array
; Saya sudah menjelaskan dalam jawaban lain perbedaan antarastd::vector
danstd::array
, Anda mungkin ingin melihatnya.sumber
Saya akan menambahkan bahwa array adalah konstruksi tingkat sangat rendah dalam C ++ dan Anda harus mencoba menjauhi mereka sebanyak mungkin saat "mempelajari tali" - bahkan Bjarne Stroustrup merekomendasikan ini (dia adalah desainer C ++).
Vektor sangat mirip dengan kinerja yang sama seperti array, tetapi dengan banyak fitur kenyamanan dan keselamatan. Anda mungkin akan mulai menggunakan array saat berinteraksi dengan API yang menangani array mentah, atau saat membuat koleksi Anda sendiri.
sumber
Referensi tersebut cukup banyak menjawab pertanyaan Anda. Sederhananya, panjang vektor bersifat dinamis sedangkan array memiliki ukuran tetap. saat menggunakan array, Anda menentukan ukurannya pada deklarasi:
untuk vektor, Anda cukup mendeklarasikannya dan menambahkan elemen
kadang-kadang Anda tidak akan mengetahui jumlah elemen yang dibutuhkan sehingga vektor akan ideal untuk situasi seperti itu.
sumber