std::vector
adalah kelas template yang merangkum array dinamis 1 , disimpan di heap, yang tumbuh dan menyusut secara otomatis jika elemen ditambahkan atau dihapus. Ini menyediakan semua kait ( begin()
,, end()
iterator, dll) yang membuatnya berfungsi dengan baik dengan sisa STL. Ini juga memiliki beberapa metode berguna yang memungkinkan Anda melakukan operasi yang pada array normal akan rumit, seperti misalnya memasukkan elemen di tengah-tengah vektor (ini menangani semua pekerjaan memindahkan elemen berikut di belakang layar).
Karena ia menyimpan elemen-elemen dalam memori yang dialokasikan pada heap, ia memiliki beberapa overhead sehubungan dengan array statis.
std::array
adalah kelas templat yang merangkum array berukuran statis, disimpan di dalam objek itu sendiri, yang berarti bahwa, jika Anda instantiate kelas pada stack, array itu sendiri akan berada di stack. Ukurannya harus diketahui pada waktu kompilasi (dilewatkan sebagai parameter templat), dan tidak dapat tumbuh atau menyusut.
Ini lebih terbatas daripada std::vector
, tetapi seringkali lebih efisien, terutama untuk ukuran kecil, karena dalam praktiknya sebagian besar pembungkus ringan di sekitar array gaya-C. Namun, ini lebih aman, karena konversi implisit ke penunjuk dinonaktifkan, dan menyediakan banyak fungsi terkait STL std::vector
dan wadah lainnya, sehingga Anda dapat menggunakannya dengan mudah dengan algoritma & co STL. Bagaimanapun, untuk batasan ukuran tetap itu jauh lebih fleksibel daripada std::vector
.
Untuk pengantar std::array
, lihat artikel ini ; untuk pengantar cepat ke std::vector
dan untuk operasi yang memungkinkan, Anda mungkin ingin melihat dokumentasinya .
Sebenarnya, saya berpikir bahwa dalam standar mereka dijelaskan dalam hal kompleksitas maksimum dari operasi yang berbeda (misalnya akses acak dalam waktu konstan, iterasi atas semua elemen dalam waktu linier, penambahan dan penghapusan elemen pada akhirnya dalam waktu diamortisasi konstan, dll), tetapi AFAIK tidak ada metode lain untuk memenuhi persyaratan tersebut selain menggunakan array dinamis. Seperti yang dinyatakan oleh @Lucretiel, standar sebenarnya mengharuskan elemen disimpan secara bersebelahan, jadi itu adalah array dinamis, disimpan di mana pengalokasi terkait meletakkannya.
std::vector
vsstd::array
dan bagaimana istilahnya berbeda.