Menguasai std::list dalam C++: Sintaks, Fungsi & Contoh Praktis
Apa Itu std::list?
Dalam C++, std::list adalah wadah urutan (sequence container) yang menyimpan elemen dalam bentuk daftar terhubung ganda (doubly-linked list). Struktur ini memungkinkan Anda menyisipkan atau menghapus item pada posisi mana saja dalam waktu konstan, sambil melakukan iterasi melalui daftar ke arah mana saja. Meskipun tidak menyediakan akses acak cepat seperti std::vector, ia unggul dalam skenario di mana penyisipan atau penghapusan sering terjadi.
Wadah ini secara otomatis mengelola memori melalui allocator, sehingga dapat tumbuh atau menyusut dari kedua ujung selama runtime.
Menggunakan std::list?
Penyisipan dan penghapusan dalam waktu konstan di mana saja dalam urutan.
Efisien untuk algoritma yang sering memindahkan elemen.
Ideal ketika ukuran wadah berubah secara tidak terduga.
Mendefinisikan List
Untuk menggunakan std::list, sertakan header <list>:
#include <list> // Definisi template // template<class T, class Alloc = std::allocator<T>> class list;
Parameter:
T – Tipe elemen yang disimpan. Setiap tipe yang dapat disalin (copy-constructible) diizinkan.
Alloc – Tipe allocator. Default std::allocator biasanya sudah cukup.
Contoh 1: Iterasi Dasar
#include <iostream> #include <list> int main() { std::list<int> my_list{12, 5, 10, 9}; for (int x : my_list) { std::cout << x << '\n'; } }
Output:
Operasi Umum std::list
Fungsi
Deskripsi
insert()
Menyisipkan elemen sebelum posisi iterator.
push_back()
Menambahkan elemen di akhir.
push_front()
Menambahkan elemen di depan.
pop_front()
Menghapus elemen pertama.
size()
Mengembalikan jumlah elemen.
front()
Mengakses elemen pertama.
back()
Mengakses elemen terakhir.
reverse()
Membalik urutan elemen.
merge()
Menggabungkan dua daftar terurut menjadi satu.
Konstruktor
std::list() – Konstruktor default; membuat daftar kosong.
std::list(n) – Konstruktor pengisi; membuat n elemen yang diinisialisasi default.
std::list(first, last) – Konstruktor rentang; menyalin elemen dari rentang lain.
std::list(std::initializer_list<T>) – Konstruktor daftar inisialisasi.
Contoh 2: Varian Konstruktor
#include <iostream> #include <list> int main() { std::list<int> l; // kosong std::list<int> l1{10, 20, 30}; std::list<int> l2(l1.begin(), l1.end()); // salinan rentang std::list<int> l3(std::move(l1)); // pemindahan std::cout << "Ukuran l: " << l.size() << '\n'; std::cout << "Isi l2:\n"; for (int x : l2) std::cout << x << '\n'; std::cout << "Isi l3:\n"; for (int x : l3) std::cout << x << '\n'; }
Output:
Properti Wadah
Urutan – Elemen disimpan dalam urutan linear yang dapat diakses berdasarkan posisi.
Daftar terhubung ganda – Setiap node mengetahui penerus dan pendahulunya, memungkinkan penyisipan/penghapusan dalam waktu konstan.
Sadar allocator – Menggunakan allocator untuk meminta memori sesuai kebutuhan.
Menyisipkan Elemen
Gunakan push_front, push_back, atau insert untuk menambahkan item.
Contoh 3: Penyisipan Campuran
#include <algorithm> #include <iostream> #include <list> int main() { std::list<int> my_list{12, 5, 10, 9}; my_list.push_front(11); // depan my_list.push_back(18); // belakang auto it = std::find(my_list.begin(), my_list.end(), 10); if (it != my_list.end()) { my_list.insert(it, 21); // sebelum 10 } for (int x : my_list) std::cout << x << '\n'; }
Output:
Menghapus Elemen
Gunakan erase untuk menghapus elemen tunggal atau rentang.
Contoh 4: Demonstrasi Erase
#include <iostream> #include <list> int main() { std::list<int> my_list{12, 5, 10, 9}; std::cout << "Sebelum penghapusan:\n"; for (int x : my_list) std::cout << x << '\n'; my_list.erase(my_list.begin()); // hapus pertama std::cout << "Setelah penghapusan:\n"; for (int x : my_list) std::cout << x << '\n'; }
Output:
Poin Utama
std::list adalah wadah urutan terhubung ganda.
Menawarkan penyisipan/penghapusan dalam waktu konstan dari posisi mana saja.
Traversal sekuensial didukung ke kedua arah.
Akses acak tidak efisien; gunakan std::vector saat Anda perlu pengindeksan cepat.
Konstruktor, iterator, dan kesadaran allocator membuat std::list serbaguna untuk kumpulan data dinamis.