QLIBC saat ini adalah salah satu perpustakaan C/C ++ yang paling lengkap, berlisensi publik. Tujuan dari proyek QLIBC adalah untuk memberikan perpustakaan C/C ++ tujuan umum yang sederhana dan kuat yang mencakup semua jenis kontainer dan rutinitas perpustakaan umum. Ini menyediakan satu set API wadah biasa yang sudah jadi dengan tampilan API yang konsisten.
QLIBC diterbitkan di bawah lisensi BSD 2-Clause yang dikenal sebagai lisensi BSD yang disederhanakan. Silakan merujuk dokumen lisensi yang termasuk dalam paket untuk lebih jelasnya.
Referensi API inti QLIBC
Referensi API Ekstensi Qlibc
| Karakteristik | Meja pohon | Tabel hash | Tabel hash statis | Tabel daftar |
|---|---|---|---|---|
| Struktur data | Pohon biner | Indeks slot | Blok array | Daftar Tertaut |
| Kompleksitas pencarian | O (log n) | O (1) / o (n) | O (1) / o (n) | Pada) |
| Masukkan kompleksitas | O (log n) | O (1) / o (n) | O (1) / o (n) | O (1) |
| Hapus kompleksitas | O (log n) | O (1) / o (n) | O (1) / o (n) | Pada) |
| Kompleksitas ruang | Pada) | Pada) | - | Pada) |
| Alokasi ruang | Dinamis | Dinamis | Pra-alokasi | Dinamis |
| Kunci tersimpan diurutkan | Ya | TIDAK | TIDAK | Ya (opsi) |
| Pembanding pengguna | Didukung | - | - | Didukung |
| Kunci yang digandakan | TIDAK | TIDAK | TIDAK | Ya (opsi) |
| Kunci disimpan dicerna | TIDAK | TIDAK | Ya | TIDAK |
| Cari kunci terdekat | Ya | TIDAK | TIDAK | TIDAK |
| Dukungan Iterator | Ya | Ya | Ya | Ya |
| Iterator kunjungi pesanan | min -> maks | acak | acak | masukkan pesanan |
| Opsi yang aman-utas | Didukung | Disediakan | Pengguna | Didukung |
| Dapat menggunakan meml bersama | TIDAK | TIDAK | Ya | TIDAK |
Semua API Kontainer memiliki tampilan dan nuansa yang konsisten. Ini pada dasarnya menyediakan fungsi pencipta yang biasanya mengembalikan pointer ke struktur wadah. Juga, semua fungsi yang terkait dengan wadah dapat diakses melalui pointer fungsi di dalam wadah atau API akses langsung gaya tradisional. Sebagai contoh,
Jadi, terlepas dari wadah mana yang Anda gunakan, Anda dapat memasukkan elemen ke dalam daftar dengan container->put(container, ...) atau Anda dapat memanggilnya menggunakan API langsung seperti qtreetbl_pub (wadah, ...).
Contoh di bawah ini menggambarkan bagaimana kelihatannya.
// create a hash-table.
qhashtbl_t *tbl = qhashtbl(0, QHASHTBL_THREADSAFE);
// add an element which key name is "score".
int x = 12345;
tbl->put(tbl, "score", &x, sizeof(int));
// get the value of the element.
int *px = tbl->get(tbl, "score", NULL, true);
if(px != NULL) {
printf("%dn", *px);
free(px);
}
// release table
tbl->free(tbl);
Berikut ini adalah implementasi yang identik dengan wadah meja-daftar yang ditautkan. Anda mungkin melihat bahwa tidak ada perubahan kode sama sekali, kecuali untuk 1 baris dalam pembuatan tabel. Inilah sebabnya mengapa QLIBC merangkum pointer fungsi yang sesuai di dalam objek wadah.
// create a linked-list-table. THE ONLY LINE YOU NEED TO CHANGE.
qlisttbl_t *tbl = qlisttbl(QLISTTBL_THREADSAFE);
// add an element which key name is "score".
int x = 12345;
tbl->put(tbl, "score", &x, sizeof(int));
// get the value of the element.
int *px = tbl->get(tbl, "score", NULL, true);
if(px != NULL) {
printf("%dn", *px);
free(px);
}
// release table
tbl->free(tbl);
Kami mencari orang yang ingin bekerja sama untuk mengembangkan dan meningkatkan QLIBC. Saat ini, kami memiliki tuntutan tinggi di area berikut.
Orang -orang berikut telah membantu dengan saran, ide, kode atau memperbaiki bug: (dalam urutan abjad dengan nama depan)
Jika kami lupa atau salah mengeja nama Anda, beri tahu kami.