Sampai titik ini kita sudah sesekali memakai std::string, std::vector, dan std::cout tanpa membahas dari mana semuanya berasal. Jawabannya adalah standard library (sering disebut STL, singkatan Standard Template Library): koleksi pustaka bawaan compiler yang berisi container, algorithm, iterator, utility, dan sistem I/O siap pakai. Pustaka ini menyertai setiap compiler C++ yang patuh standar, sehingga kode kita berjalan sama di Linux, Windows, maupun macOS tanpa instalasi tambahan. Pada Chapter ini kita memetakan isi standard library, melihat cara pustakanya diorganisir dalam header, dan membuktikan dengan program kecil bahwa beberapa komponennya bisa langsung bekerja sama.

Empat Pilar Standard Library #

Isi standard library bisa kita kelompokkan menjadi beberapa pilar besar. Memahami pengelompokan ini memudahkan kita mencari alat yang tepat saat menghadapi masalah baru.

  • Container: struktur data untuk menampung kumpulan nilai — std::vector, std::array, std::deque, std::list, std::set, std::map, std::unordered_map, dan lainnya. Container adalah rumah bagi data kita.
  • Algorithm: fungsi generik untuk memproses data — std::sort, std::find, std::count, std::accumulate. Kita tidak menulis ulang pengurutan; kita memanggil yang sudah teruji.
  • Iterator: objek yang menunjuk ke elemen container dan menjadi jembatan antara container dan algorithm. std::sort(v.begin(), v.end()) bekerja karena iterator memberi tahu algorithm di mana data dimulai dan berakhir.
  • Utility: alat kecil yang memecahkan masalah spesifik — std::pair, std::tuple, std::optional, std::variant, std::span. Sering kali utility inilah yang membuat kode kita paling ringkas.

Di luar empat pilar tersebut ada juga I/O stream (std::cout, std::ifstream), string, serta pustaka khusus seperti <chrono> untuk waktu dan <random> untuk angka acak. Seluruhnya mengikuti filosofi yang sama: abstraksi yang nyaris tanpa biaya tambahan saat runtime, sesuai karakter C++ yang kita bahas sejak Chapter Apa itu C++?.

Cara Library Diorganisir #

Standard library disusun per header. Setiap header berkelompok menurut fungsinya, dan kita hanya perlu menyertakan header yang benar-benar dipakai. Tabel berikut merangkum header yang paling sering kita jumpai di section ini.

HeaderIsi utama
<vector>, <array>, <deque>, <list>container sekuensial
<set>, <map>, <unordered_set>, <unordered_map>container asosiatif
<stack>, <queue>, <priority_queue>container adapter
<algorithm>sort, find, count, transform, dan ratusan algorithm lain
<numeric>accumulate, iota, gcd, dan sejenisnya
<utility>, <tuple>, <optional>, <variant>, <any>tipe utilitas
<string>, <string_view>teks
<iostream>, <fstream>, <sstream>input-output

Nama semua entri di dalamnya hidup di namespace std, itulah sebabnya kita selalu menulis std:: di depan. Pola ini menjaga kode kita tidak bertabrakan dengan nama yang kita buat sendiri, seperti saat kita membuat namespace sendiri pada Chapter Namespace.

Program Kecil dengan Beberapa Komponen #

Program berikut menyatukan empat pilar sekaligus: container untuk menampung nilai ujian, algorithm untuk mengurutkan, numeric untuk menjumlahkan, dan I/O untuk melaporkan hasil.

cpp
#include <algorithm>  // std::sort (container akan diurutkan)
#include <iostream>   // std::cout: output ke terminal
#include <numeric>    // std::accumulate: menjumlahkan elemen
#include <string>     // std::string: teks
#include <vector>     // std::vector: array dinamis

int main() {
    // container: kita menaruh data dalam std::vector
    std::vector<int> nilai = {78, 92, 65, 88, 71};

    // algorithm: std::sort mengurutkan elemen menaik
    std::sort(nilai.begin(), nilai.end());

    // numeric: std::accumulate menjumlahkan seluruh elemen, mulai dari 0
    int total = std::accumulate(nilai.begin(), nilai.end(), 0);
    double rataRata = static_cast<double>(total) / nilai.size();

    std::cout << "Nilai terurut :";
    for (int n : nilai) std::cout << ' ' << n;   // cetak dengan pemisah rapi
    std::cout << "\n";
    std::cout << "Total         : " << total << "\n";
    std::cout << "Rata-rata     : " << rataRata << "\n";
    std::cout << "Terendah      : " << nilai.front() << "\n";
    std::cout << "Tertinggi     : " << nilai.back() << "\n";

    return 0;
}

Output yang Dihasilkan:

text
Nilai terurut : 65 71 78 88 92
Total         : 394
Rata-rata     : 78.8
Terendah      : 65
Tertinggi     : 92

Mari kita bedah:

  1. Baris 1-5 (#include ...): lima header berbeda masing-masing menyumbang satu kemampuan. Menyertakan header secara eksplisit membuat ketergantungan program kita jelas terbaca.
  2. Baris 9 (std::vector<int> nilai = ...): container std::vector menampung lima bilangan. Tanda <int> menunjukkan ini adalah template — satu definisi container yang bisa menampung tipe apa pun.
  3. Baris 12 (std::sort(nilai.begin(), ...)): algorithm mengurutkan dari iterator awal hingga akhir. Setelah baris ini, nilai berisi 65 71 78 88 92.
  4. Baris 15-16 (std::accumulate): penjumlahan semua elemen dari nilai awal 0. Hasilnya 394, lalu kita hitung rata-rata 78.8 dengan cast ke double agar pembagian tidak memotong desimal.
  5. Baris 18-20: kita mencetak elemen dengan pemisah spasi di depan (' ' << n), sehingga tidak ada spasi menggantung di akhir baris output.
  6. Baris 23-24 (front() / back()): karena vector sudah terurut, elemen pertama otomatis nilai terendah dan elemen terakhir nilai tertinggi — contoh bagaimana memilih struktur yang tepat menyederhanakan logika.

Mengapa Kita Memakai STL #

Alasan pertama adalah teruji. std::sort dan std::vector dipakai miliaran program selama puluhan tahun; bug kasus tepinya jauh lebih kecil daripada struktur data yang kita tulis sendiri dalam semalam. Alasan kedua adalah efisien: algorithm STL dirancang para spesialis dan sering memakai trik optimasi yang jarang ada di implementasi buatan sendiri, seperti std::sort yang menggabungkan beberapa teknik pengurutan. Alasan ketiga adalah portabel: kode yang memakai STL dikompilasi di Linux, macOS, atau Windows dengan hasil perilaku yang sama, karena seluruhnya diikat oleh standar ISO yang kita lihat pada Chapter Standar Bahasa C++.

Section ini akan menelusuri komponen STL satu per satu, dimulai dari yang paling sering kita sentuh: manipulasi std::string dan pasangan hematnya, string_view.

Rujukan resmi: cppreference — Standard library headers , cppreference — Containers library , cppreference — Algorithms library .