Bagikan melalui


Contoh Kelas Kontainer

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_backatau 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 Alloctersimpan , 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 sama const Ty *dengan .

  • Jenisnya Alloc::const_reference sama const Ty&dengan .

  • Jenisnya Alloc::pointer sama Ty *dengan .

  • Jenisnya Alloc::reference sama Ty&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 sama const Ty *dengan . (Penunjuk const bisa menjadi kelas.)

  • Jenis Alloc::pointer tidak perlu sama Ty *dengan . (Penunjuk bisa menjadi kelas.)

Persyaratan

Header: <kontainer sampel>

Lihat juga

<kontainer sampel>