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 disusun berdasarkan tiga komponen inti yang bekerja bersama:
| Komponen | Tujuan | Contoh |
|---|---|---|
| Container | Menyimpan kumpulan object | vector, map, set |
| Iterator | Menyediakan akses ke elemen container | Input, output, akses acak |
| Algoritma | Melakukan operasi pada data | sort, find, transform |
Inti pentingnya adalah algoritma tidak mengenal 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, gunakan algoritma apa pun dengan container 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 buat sistem pemrosesan data sederhana yang menunjukkan filosofi STL dalam memisahkan container, iterator, dan algoritma. Kamu akan membuat module utilitas yang bekerja dengan komponen STL dan program utama yang menunjukkan cara bagian-bagian ini saling terhubung.
Kamu akan membuat dua file:
DataProcessor.h: Definisikan fungsi utilitas yang bekerja dengan container STL melalui iterator, untuk menunjukkan filosofi desain STL.Buat fungsi bernama
printVectoryang menerimastd::vector<int>&dan mencetak semua elemen yang dipisahkan oleh spasi, lalu diikuti baris baru. Gunakan iterator (begin()danend()) untuk menelusuri container.Buat fungsi bernama
sortAndPrintyang menerimastd::vector<int>&, mengurutkannya menggunakanstd::sort, lalu mencetak elemen yang sudah diurutkan dan dipisahkan oleh spasi, 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 dapat menggunakan perulangan sederhana dengan iterator untuk ini.main.cpp: Baca input dan tunjukkan cara kerja komponen STL secara 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 cara:- 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 cara fungsi-fungsimu bekerja dengan vector melalui iterator, serta cara std::sort dan std::find bekerja pada container apa pun yang menyediakan tipe iterator yang sesuai. Inilah kekuatan desain STL: algoritma tidak bergantung pada container 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