Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Catatan
Topik ini ada dalam dokumentasi Microsoft C++ sebagai contoh kontainer nonfungsi yang digunakan dalam Pustaka Standar C++. Untuk informasi selengkapnya, lihat Kontainer Pustaka Standar C++.
Menjelaskan objek yang mengontrol urutan elemen dengan panjang yang bervariasi, biasanya berjenis Ty
. Urutan disimpan dengan cara yang berbeda, tergantung pada kontainer aktual.
Konstruktor kontainer atau fungsi anggota mungkin menemukan kesempatan untuk memanggil konstruktor Ty(const Ty&) atau fungsi Ty::operator=(const Ty&). Jika panggilan seperti itu melemparkan pengecualian, objek kontainer berkewajiban untuk mempertahankan integritasnya, dan untuk menumbuhkan kembali pengecualian yang ditangkapnya. Anda dapat menukar, menetapkan, menghapus, atau menghancurkan objek kontainer dengan aman setelah melemparkan salah satu pengecualian ini. Namun, secara umum, Anda tidak dapat memprediksi status urutan yang dikendalikan oleh objek kontainer.
Beberapa peringatan tambahan:
Jika ekspresi
~Ty
melemparkan pengecualian, status objek kontainer yang dihasilkan tidak terdefinisi.Jika kontainer menyimpan objek alokator al, dan al melempar pengecualian selain sebagai akibat dari panggilan ke
al.allocate
, status objek kontainer yang dihasilkan tidak terdefinisi.Jika kontainer menyimpan comp objek fungsi, untuk menentukan cara mengurutkan urutan yang dikontrol, dan comp melemparkan pengecualian dalam bentuk apa pun, status objek kontainer yang dihasilkan tidak terdefinisi.
Kelas kontainer yang ditentukan oleh Pustaka Standar C++ memenuhi beberapa persyaratan tambahan, seperti yang dijelaskan dalam paragraf berikut.
Daftar templat kelas kontainer menyediakan deterministik, dan berguna, perilaku bahkan di hadapan pengecualian yang dijelaskan di atas. Misalnya, jika pengecualian dilemparkan selama penyisipan satu atau beberapa elemen, kontainer dibiarkan tidak diubah dan pengecualian ditumbuhi kembali.
Untuk semua kelas kontainer yang ditentukan oleh Pustaka Standar C++, jika pengecualian dilemparkan selama panggilan ke fungsi anggota berikut, insert
, , push_back
atau push_front
, kontainer dibiarkan tidak diubah dan pengecualian ditumbuhi kembali.
Untuk semua kelas kontainer yang ditentukan oleh Pustaka Standar C++, tidak terkecuali yang dilemparkan selama panggilan ke fungsi anggota berikut: pop_back
, pop_front
.
Fungsi anggota menghapus pengecualian hanya jika operasi penyalinan (penugasan atau konstruksi salinan) melemparkan pengecualian.
Selain itu, tidak ada pengecualian yang dilemparkan saat menyalin iterator yang dikembalikan oleh fungsi anggota.
Pertukaran fungsi anggota membuat janji tambahan untuk semua kelas kontainer yang ditentukan oleh Pustaka Standar C++:
Fungsi anggota melemparkan pengecualian hanya jika kontainer menyimpan objek alokator al, dan
al
melemparkan pengecualian saat disalin.Referensi, penunjuk, dan iterator yang menunjuk elemen urutan terkontrol yang ditukar tetap valid.
Objek kelas kontainer yang ditentukan oleh C++ Standard Library mengalokasikan dan membebaskan penyimpanan untuk urutan yang dikontrolnya melalui objek jenis Alloc
tersimpan , yang biasanya merupakan parameter templat. Objek alokator semacam itu harus memiliki antarmuka eksternal yang sama dengan objek kelas allocator<Ty>
. Secara khusus, Alloc
harus berjenis yang sama dengan Alloc::rebind<value_type>::other
Untuk semua kelas kontainer yang ditentukan oleh Pustaka Standar C++, fungsi Alloc get_allocator const;
anggota mengembalikan salinan objek alokator tersimpan. Perhatikan bahwa objek alokator tersimpan tidak disalin saat objek kontainer ditetapkan. Semua konstruktor menginisialisasi nilai yang disimpan dalam allocator
, untuk Alloc
jika konstruktor tidak berisi parameter alokator.
Menurut C++ Standard, kelas kontainer yang ditentukan oleh C++ Standard Library dapat mengasumsikan bahwa:
Semua objek kelas
Alloc
dibandingkan sama.Jenisnya
Alloc::const_pointer
samaconst Ty *
dengan .Jenisnya
Alloc::const_reference
samaconst Ty&
dengan .Jenisnya
Alloc::pointer
samaTy *
dengan .Jenisnya
Alloc::reference
samaTy&
dengan .
Namun, dalam implementasi ini, kontainer tidak membuat asumsi yang menyederhanakan tersebut. Dengan demikian, mereka bekerja dengan baik dengan objek alokator yang lebih ambisius:
Semua objek kelas
Alloc
tidak perlu dibandingkan sama. (Anda dapat mempertahankan beberapa kumpulan penyimpanan.)Jenis
Alloc::const_pointer
tidak perlu samaconst Ty *
dengan . (Penunjuk const bisa menjadi kelas.)Jenis
Alloc::pointer
tidak perlu samaTy *
dengan . (Penunjuk bisa menjadi kelas.)
Persyaratan
Header: <kontainer sampel>