Apakah ada pedoman tentang bagaimana seseorang harus menulis wadah baru yang akan berperilaku seperti STL
wadah lainnya?
c++
stl
c++-standard-library
Avinash
sumber
sumber
Jawaban:
Berikut urutan pseudo-kontainer saya potongan bersama dari § 23.2.1 \ 4 Catatan bahwa
iterator_category
harus menjadi salah satustd::input_iterator_tag
,std::output_iterator_tag
,std::forward_iterator_tag
,std::bidirectional_iterator_tag
,std::random_access_iterator_tag
. Juga perhatikan bahwa di bawah ini secara teknis lebih ketat dari yang disyaratkan, tetapi inilah idenya. Perhatikan bahwa sebagian besar fungsi "standar" secara teknis bersifat opsional, karena kedahsyatannya yaitu iterator.Juga, setiap kali saya membuat wadah, saya menguji dengan kelas yang kurang lebih seperti ini:
Buat wadah berisi
tester
objek, dan panggil masing-masingfunction()
saat Anda menguji wadah Anda. Jangan membuattester
objek global apa pun . Jika wadah Anda curang di mana saja,tester
kelas ini akanassert
dan Anda akan tahu bahwa Anda tidak sengaja menipu di suatu tempat.sumber
assert(tester::livecount == 0);
. Mmmmm, masih belum yakin bagaimana framework tester ini bekerja. Bisakah Anda memberi contoh?memcpy
. (pengujian tidak selalu mudah, tetapi berhasil menangkap beberapa). Inilivecount
adalah detektor kebocoran sederhana, untuk memastikan penampung Anda memanggil jumlah konstruktor dan destruktor yang sama.verifier
tidak bermaksudvarifier
.std::iterator
header<iterator>
Anda perlu membaca bagian Standar C ++ tentang Penampung dan persyaratan yang diberlakukan Standar C ++ untuk implementasi penampung.
Bab yang relevan dalam standar C ++ 03 adalah:
Bagian 23.1 Persyaratan Kontainer
Bab yang relevan dalam standar C ++ 11 adalah:
Bagian 23.2 Persyaratan Kontainer
Draf hampir final dari standar C ++ 11 tersedia secara gratis di sini .
Anda mungkin juga, membaca beberapa buku bagus yang akan membantu Anda memahami persyaratan dari sudut pandang pengguna wadah. Dua buku bagus yang dengan mudah terlintas di benak saya adalah:
STL efektif olehScott Meyers &
Perpustakaan Standar C ++: Tutorial dan Referensi olehNicolai Josutils
sumber
Berikut adalah implementasi yang sangat sederhana dari vektor palsu, yang pada dasarnya merupakan pembungkus
std::vector
dan memiliki iteratornya sendiri (tetapi nyata), yang meniru iterator STL. Sekali lagi, iterator sangat sederhana, melewati banyak konsep seperticonst_iterator
, pemeriksaan validitas, dll.Kode dijalankan di luar kotak.
sumber