Gambaran Umum dan Filosofi STL
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan C++ di Coddy. Pelajaran 70 dari 104.
Standard Template Library (STL) adalah kumpulan class dan fungsi berbasis template yang menyediakan struktur data dan algoritma umum. Dibangun berdasarkan konsep template yang telah kamu pelajari, STL menerapkan filosofi desain yang kuat: memisahkan penyimpanan data dari manipulasi data.
STL tersusun atas tiga komponen inti yang bekerja bersama:
| Komponen | Tujuan | Contoh |
|---|---|---|
| Kontainer | Menyimpan kumpulan object | vector, map, set |
| Iterator | Menyediakan akses ke elemen kontainer | Input, output, akses acak |
| Algoritma | Melakukan operasi pada data | sort, find, transform |
Inti pentingnya adalah algoritma tidak mengetahui container secara langsung, algoritma bekerja melalui iterator. Artinya, satu algoritma sort dapat digunakan dengan vector, array, dan container apa pun yang menyediakan tipe iterator yang tepat:
#include <vector>
#include <algorithm>
#include <iostream>
int main() {
std::vector<int> nums = {5, 2, 8, 1, 9};
std::sort(nums.begin(), nums.end());
for (int n : nums) {
std::cout << n << " ";
}
// output: 1 2 5 8 9
}Pemisahan ini berarti kamu bisa memadukan berbagai pilihan, menggunakan algoritma apa pun dengan kontainer yang kompatibel tanpa menulis kode baru. STL menyediakan implementasi yang telah teruji dan dioptimalkan, sehingga kamu bisa fokus menyelesaikan masalah alih-alih membuat ulang struktur data umum.
Tantangan
MudahMari kita bangun sistem pemrosesan data sederhana yang menunjukkan filosofi STL dalam memisahkan kontainer, iterator, dan algoritma. Kamu akan membuat modul utilitas yang bekerja dengan komponen STL dan program utama yang menunjukkan bagaimana bagian-bagian ini bekerja bersama.
Kamu akan membuat dua file:
DataProcessor.h: Definisikan fungsi utilitas yang bekerja dengan kontainer STL melalui iterator, untuk menunjukkan filosofi desain STL.Buat fungsi bernama
printVectoryang menerimastd::vector<int>&dan mencetak semua elemen yang dipisahkan oleh spasi, lalu baris baru. Gunakan iterator (begin()danend()) untuk menelusuri kontainer.Buat fungsi bernama
sortAndPrintyang menerimastd::vector<int>&, mengurutkannya menggunakanstd::sort, lalu mencetak elemen yang sudah diurutkan, dipisahkan oleh spasi, kemudian diikuti baris baru.Buat fungsi bernama
findElementyang menerimastd::vector<int>&dan nilaiintyang akan dicari. Gunakanstd::finduntuk menemukan elemen tersebut. Jika ditemukan, cetakFound: <value>. Jika tidak ditemukan, cetakNot found: <value>.Buat fungsi bernama
getSumyang menerimastd::vector<int>&dan mengembalikan jumlah semua elemennya. Kamu bisa menggunakan perulangan sederhana dengan iterator untuk melakukannya.main.cpp: Baca input dan tunjukkan cara kerja komponen STL bersama-sama.Baca lima input (masing-masing pada baris terpisah):
- Bilangan bulat pertama
- Bilangan bulat kedua
- Bilangan bulat ketiga
- Bilangan bulat keempat
- Nilai yang akan dicari
Buat
std::vector<int>dan tambahkan empat bilangan bulat pertama ke dalamnya. Lalu tunjukkan filosofi STL dengan:- Mencetak
Original:, lalu memanggilprintVector - Mencetak
Sorted:, lalu memanggilsortAndPrint - Memanggil
findElementdengan nilai yang dicari - Mencetak
Sum: <result>menggunakangetSum
Contohnya, dengan input 5, 2, 8, 1, dan 8:
Original: 5 2 8 1
Sorted: 1 2 5 8
Found: 8
Sum: 16Dengan input 10, 30, 20, 40, dan 15:
Original: 10 30 20 40
Sorted: 10 20 30 40
Not found: 15
Sum: 100Perhatikan bagaimana fungsi-fungsimu bekerja dengan vector melalui iterator, dan bagaimana std::sort serta std::find beroperasi pada kontainer apa pun yang menyediakan tipe iterator yang sesuai. Inilah kekuatan desain STL: algoritma tidak bergantung pada kontainer, dan hanya terhubung melalui iterator.
Coba sendiri
#include <iostream>
#include <vector>
#include "DataProcessor.h"
using namespace std;
int main() {
// Baca lima bilangan bulat dari input
int num1, num2, num3, num4, searchValue;
cin >> num1;
cin >> num2;
cin >> num3;
cin >> num4;
cin >> searchValue;
// TODO: Buat vector dan tambahkan empat bilangan bulat pertama ke dalamnya
// TODO: Cetak "Original: " dan panggil printVector
// TODO: Cetak "Sorted: " dan panggil sortAndPrint
// TODO: Panggil findElement dengan nilai yang dicari
// TODO: Cetak "Sum: " diikuti hasil dari getSum
return 0;
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Object
1Dasar-Dasar OOP
File EksternalBuild dan Kompilasi C++File Header dan File SourceNamespace dan CakupanPengantar OOP dalam C++class vs objectPointer 'this'method (Fungsi Anggota)Atribut (Anggota Data)Dasar Ctor dan DtorRingkasan: Kalkulator Sederhana4Properti class
Anggota instance vs staticGetter dan setterFungsi anggota constKata kunci mutableMethod dan variabel staticFungsi dan class friendRangkuman, Pengelola Rekening Bank7Pewarisan
Pewarisan DasarTingkat Akses pada PewarisanUrutan Pemanggilan Ctor & DtorPenimpaan methodFungsi Virtual & VTablePewarisan BergandaPewarisan VirtualRangkuman: Hierarki Karyawan10Gambaran Umum STL
Gambaran Umum dan Filosofi STLKontainer STLIteratorAlgoritma STLFunctor dan Ekspresi LambdaRangkuman: Frekuensi Kata2Manajemen Memori
Memori Stack vs HeapPointer dan ReferenceMemori Dinamis (new/delete)Smart Pointer di C++RAII di C++Rangkuman: Pengelola Array Dinamis5Enkapsulasi
Penentu Akses dalam C++Penentu Akses secara MendalamPenyembunyian Informasistruct vs classNested dan Inner classRangkuman, Sistem Catatan Siswa8Polimorfisme
Polimorfisme saat Compile vs RuntimeOverloading FungsiMeninjau Kembali Fungsi VirtualFungsi Virtual MurniKelas AbstrakDesain Interface di C++Casting Dinamis & RTTIRangkuman: Kalkulator Bentuk3Konstruktor & Destruktor
Konstruktor DefaultKonstruktor BerparameterKonstruktor SalinKonstruktor PindahDaftar Inisialisasi KonstruktorKonstruktor DelegasiKupas Tuntas DestruktorAturan Tiga, Lima, dan NolRangkuman: class String6Overloading Operator
Pengantar Overloading OperatorOverloading Operator AritmetikaOverloading Operator PerbandinganOperator StreamOverloading Operator PenugasanOverloading Operator [] dan ()Operator Konversi TipeRingkasan, class Matrix9Template
Template FungsiTemplate classSpesialisasi TemplateTemplate VariadikDasar SFINAE & Type TraitsRangkuman, Container GenerikLatihan sendiri: Compiler C++ online