Standard library adalah teman kerja terdekat kita sepanjang course ini: dari std::vector pada section awal hingga std::expected dan std::jthread pada section lanjutan, semuanya punya satu rujukan yang sama. Chapter sebelumnya memetakan dokumen resmi secara luas; chapter ini mempersempit fokus ke satu situs — cppreference.com — dan mengurutkannya menjadi lima kategori besar. Setelah chapter ini, kita tahu persis halaman mana yang perlu dibuka ketika sedang memilih container, memanggil algorithm, atau menyelidiki perilaku I/O.
Lima Kategori Besar di cppreference #
Halaman header adalah indeks seluruh header standar dan titik mulai terbaik saat kita belum hafal namanya. Dari sana, isi library membelah ke lima kategori besar berikut:
- Containers
— daftar
std::vector,std::map,std::unordered_map, dan kawan-kawan, lengkap dengan tabel kecepatan setiap operasi; tabel ini paling berguna saat kita memilih struktur data. - Algorithms
—
std::sort,std::find,std::transform, dan seluruh<ranges>; membaca daftar ini sesekali membuat kita berhenti menulis loop manual tanpa perlu. - Utilities
—
std::optional,std::expected,std::tuple,std::move, dan pembanding; kategori “serba ada” yang sering menyelamatkan desain API. - Input/Output
—
std::iostream, manipulator, dan aliran berkas; halaman ini kita buka saat format angka atau penanganan error I/O membingungkan. - Concurrency
—
std::thread,std::mutex,std::atomic, danstd::jthread; dibaca bersama section Concurrency course ini.
Halaman yang Kita Pakai Sepanjang Course #
Beberapa header muncul begitu sering hingga patut dihafal path-nya: <iostream> dan <print> untuk keluaran, <string> dan <vector> sebagai tipe data bawaan pilihan, <algorithm> untuk pemrosesan, <map> dan <unordered_map> untuk pencarian cepat, lalu <optional>, <expected>, dan <format> dari generasi C++ modern. Kebiasaan yang efektif: buka halaman header, bukan hanya halaman fungsinya. Halaman header menampilkan seluruh isi dalam satu pandangan, sehingga kita menemukan fungsi bantu yang tidak pernah terlintas — misalnya std::rotate yang tersembunyi di dalam <algorithm>.
Habit Membaca Complexity dan Requirements #
Dua bagian halaman yang wajib dibaca sebelum memakai apa pun adalah Complexity dan Requirements. Bagian Complexity menyatakan biaya operasi dengan notasi Big-O — std::vector::push_back amortized O(1), sedangkan std::map::insert O(log n); angka ini menentukan pilihan container pada jalur kode yang panas. Bagian Requirements menyatakan syarat yang harus dipenuhi tipe kita, misalnya harus CopyAssignable atau Comparable; jika syarat ini dilanggar, error compiler yang muncul akan sangat panjang, dan tahu requirement-nya sejak awal membuat pesan error itu mudah dipahami. Sisipkan juga kebiasaan memeriksa badge since C++xx di setiap deklarasi, agar kita tidak meniru fitur yang belum didukung compiler teman kerja.
Peta Header dalam Program #
Untuk mengubah peta di atas menjadi ceklis yang tercetak, program berikut menyusun lima kategori beserta contoh header-nya. Perhatikan bahwa urutan keluaran tidak mengikuti urutan penulisan — itulah sifat std::map yang menjaga kunci terurut:
#include <iostream>
#include <map>
#include <string>
#include <vector>
// Satu header standar beserta path halamannya di cppreference.
struct Header {
std::string nama;
std::string halaman;
};
int main() {
// std::map menjaga kunci (kategori) tetap terurut otomatis.
std::map<std::string, std::vector<Header>> peta = {
{"Algoritma", {{"<algorithm>", "w/cpp/header/algorithm"},
{"<ranges>", "w/cpp/header/ranges"},
{"<numeric>", "w/cpp/header/numeric"}}},
{"Concurrency",{{"<atomic>", "w/cpp/header/atomic"},
{"<mutex>", "w/cpp/header/mutex"},
{"<thread>", "w/cpp/header/thread"}}},
{"Container", {{"<string>", "w/cpp/header/string"},
{"<unordered_map>", "w/cpp/header/unordered_map"},
{"<vector>", "w/cpp/header/vector"}}},
{"I/O", {{"<fstream>", "w/cpp/header/fstream"},
{"<iostream>", "w/cpp/header/iostream"},
{"<print>", "w/cpp/header/print"}}},
{"Utilities", {{"<expected>", "w/cpp/header/expected"},
{"<optional>", "w/cpp/header/optional"},
{"<utility>", "w/cpp/header/utility"}}},
};
int total = 0;
for (const auto& [kategori, daftar] : peta) {
std::cout << kategori << " (" << daftar.size() << " header)\n";
for (const Header& h : daftar) {
std::cout << " " << h.nama << " -> en.cppreference.com/" << h.halaman << "\n";
++total;
}
}
std::cout << "Total header terkurasi: " << total << "\n";
return 0;
}Output yang Dihasilkan:
Algoritma (3 header)
<algorithm> -> en.cppreference.com/w/cpp/header/algorithm
<ranges> -> en.cppreference.com/w/cpp/header/ranges
<numeric> -> en.cppreference.com/w/cpp/header/numeric
Concurrency (3 header)
<atomic> -> en.cppreference.com/w/cpp/header/atomic
<mutex> -> en.cppreference.com/w/cpp/header/mutex
<thread> -> en.cppreference.com/w/cpp/header/thread
Container (3 header)
<string> -> en.cppreference.com/w/cpp/header/string
<unordered_map> -> en.cppreference.com/w/cpp/header/unordered_map
<vector> -> en.cppreference.com/w/cpp/header/vector
I/O (3 header)
<fstream> -> en.cppreference.com/w/cpp/header/fstream
<iostream> -> en.cppreference.com/w/cpp/header/iostream
<print> -> en.cppreference.com/w/cpp/header/print
Utilities (3 header)
<expected> -> en.cppreference.com/w/cpp/header/expected
<optional> -> en.cppreference.com/w/cpp/header/optional
<utility> -> en.cppreference.com/w/cpp/header/utility
Total header terkurasi: 15Bedah program di atas:
std::map<std::string, std::vector<Header>>: kunci string diurutkan otomatis oleh map, sehingga kategori tercetak alfabetis tanpa usaha tambahan — keputusan struktur data justru mengurus pemformatan.- Structured binding
const auto& [kategori, daftar]: memecah setiap entri map menjadi kunci dan nilai tanpa menyebutfirstdansecond. daftar.size(): menghitung header per kategori secara dinamis; menambah entri baru tidak butuh pembaruan apa pun.- Penghitung
total: sengaja dikelola manual karena tidak tersedia dari map; penjumlahan kecil semacam ini nanti bisa digantikanstd::accumulatedari<numeric>.
Dokumentasi memberi jawaban atas pertanyaan “apa dan bagaimana”, tetapi jarang menjelaskan “mengapa desainnya seperti ini”. Untuk lapisan pemahaman itu, kita berpindah ke sumber kedua yang telah mendampingi pemrogram C++ selama puluhan tahun: buku. Chapter berikutnya memilihkan buku klasik mana yang cocok untuk tahap belajar kita.