Standard Library
• Standard C++ library terdiri dari:
• C Library
• Standard Template Library (STL)
• Container library
• Iterator library
• Algorithm library
• C++ Miscellaneous Library
• Language support library (new, typeinfo, limits)
• Diagnostic library (exceptions)
• General utility library
• String library
Mereferensi C Library
• Library standar C sebagian besar tersedia di
C++ • dgn sedikit perubahan nama library:
• <math.h> menjadi <
cmath>
• fungsi spt sqrt(), abs()
• <stdlib.h> menjadi <cstdlib>
• fungsi spt rand(), srand()
Motivasi Template
• Fungsi maximum dua data:
int maximum(const int& left, const int& right)
{
return (left > right) ? left : right;
}
• hanya bekerja dengan baik untuk int, namun tidak dapat digunakan
untuk tipe data lain
• maximum unt double? untuk char?
Motivasi Template
• Class untuk sepasang data bertipe sama:
class Pair {
private:
int _first;
int _second;
public:
Pair(int a, int b) : _first(a), _second(b) {}
int getFirst() const { return _first; }
int getSecond() const { return _second; }
};
• hanya bekerja pada sepasang int
• bisa untuk koordinat 2D, mis (5, 7)
• tidak bisa untuk sepasang string, mis ("Potter", "Harry") •
tidak bisa untuk sepasang double, mis (1.23, -3.45)
Template
• Bisakah kita menulis fungsi atau class yang dapat menerima
tipe data apapun, namun hanya ditulis sekali?
• ya, dengan template
• Template adalah fungsi atau class yang ditulis untuk tipe yang
belum dispesifikasi
• STL (Standard Template Library) penuh berisi solusi template
berbagai struktur data dan algoritma
Multiple Typename
• Class Pair dpt dibuat unt dua elemen berbeda
tipe: • ("Harry
Potter", 18)
• (10, "sepuluh")
Algorithm Iterator
Container
STL Iterator
• Sebuah iterator menyerupai sebuah pointer
• Menggunakan iterator, sebuah algoritma dapat mengakses dan
memanipulasi elemen dalam container tanpa harus peduli
bagaimana elemen tersebut diorganisasi dalam container
Pointer
• Apa yang dapat dilakukan pointer?
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int *p;
for (p = a; p != a+9; ++p) {
cout << *p << endl;
}
1. diinisialisasi menunjuk ke awal container (array pada contoh di atas) 2.
dibandingkan dengan pointer lain untuk cek apakah sudah menunjuk pada akhir
container
3. di-increment (++) untuk menunjuk ke elemen berikutnya dalam container
4. di-deference (*) untuk mengakses elemen dalam container
STL Container
• STL container:
• implementasi dari beberapa struktur data yang
berguna • obyek yang berisi obyek lain
• Fitur container:
• container adalah sebuah template class
• container mendukung beberapa fungsi:
• size() : banyaknya elemen
• empty() : apakah container kosong?
• begin()
• end()
Vector
• Container yang sangat sederhana
• Array yang diperbaiki/diperkuat
• Dapat digunakan seperti array
• Akses nilai dengan index, misal v sebuah
vector: • x = v[i];
• v[j] = z;
• Kemampuan tambahan :
• menambah/mengurangi panjang vector
• mengisi elemen pada posisi tertentu
• menghapus elemen dari posisi tertentu
Pembuatan / Penambahan Vector
vector<string> strawHat;
vector untuk simpan string, kosong
strawHat
Pembuatan / Penambahan Vector
strawHat.push_back("Sanji
vector<string>
?
") [2]
strawHat; enambah elemen strawHat[5] = "Chopper";
m
strawHat.push_back("Luffy
"); strawHat[0]
strawHat.push_back("Zoro" strawHat[1]
); strawHat[2]
strawHat.push_back("Nami"
strawHat[3]
);
strawHat.push_back("Usopp strawHat[4]
");
[0]
"Zoro" "Usopp" "Sanji"
"Luffy" "Nami" [4]
strawHat [1] [3]
strawHat[0] strawHat[4]
strawHat[1]
strawHat[5] = error!
"Chopper";
[0] [1] [2] [3] [4]
Pengisian Vector
[0] [1] [2] [3] [4]
"Usopp" "Sanji"
strawHat
"Luffy" "Zoro" "Nami"
strawHat.insert(2, "Chopper");
strawHat
?
Pengisian Vector
[0] [1] [2] [3] [4]
"Usopp" "Sanji"
strawHat
"Luffy" "Zoro" "Nami"
strawHat.insert(2, "Chopper");
strawHat
"Luffy" "Zoro" "Chopper"
"Nami" "Usopp"
"Sanji"
strawHat.erase(1);
strawHat
?
strawHat[3] = "Franky";
strawHat
?
Edit Elemen Vector
[0] [1] [2] [3] [4]
strawHat
"Luffy" "Zoro" "Nami" [0] [1] [2] [3]
"Usopp" "Sanji"
[4]
strawHat[3] =
"Franky";
strawHat "Luffy"
"Zoro" "Nami"
"Franky" "Sanji"
Contoh Program
dgn STL Vector ?
using namespace std;
#include <iostream> int main() {
#include <vector> vector<int> intV;
cout << "intV size = " <<
intV.size() << endl; for (int i =
Output: 0; i != 5; ++i)
intV.push_back(i);
cout << "intV size = " <<
dgn STL Vector
intV.size() << endl; if #include <iostream>
(!intV.empty()) { #include <vector>
cout << "intV = [ "; using namespace std;
for (int j = 0; j != intV.size(); int main() {
++j) cout << intV[j] << " "; vector<int> intV;
cout << "]" << endl; cout << "intV size = " <<
} intV.size() << endl; for (int i =
intV.pop_back(); 0; i != 5; ++i)
cout << "intV size = " << intV.push_back(i);
intV.size() << endl; cout << "intV size = " <<
system("pause"); intV.size() << endl; if
return 0; (!intV.empty()) {
} cout << "intV = [ ";
intV size = 0 for (int j = 0; j != intV.size();
intV size = 5 ++j)
intV = [ 0 1 2 3 4 ] intV size cout << intV[j] << " ";
= 4
cout << "]" << endl;
Contoh Program }
intV.pop_back(); intV size = 0
cout << "intV size = " << intV size = 5
intV.size() << endl; intV = [ 0 1 2 3 4 ] intV size
= 4
system("pause");
return 0;
}
Output:
Iterator unt Traversal Vector
#include <iostream>
#include <vector>
using namespace std;
void printVector(vector<int>& iV) {
vector<int>::iterator iter;
cout << "V = [ ";
for (iter = iV.begin(); iter != iV.end();
++iter) cout << *iter << " ";
cout << "]" << endl;
}
int main() { system("pause");
vector<int> intV; return 0;
for (int i = 0; i != 5; ++i) }
intV.push_back(i); Output:
printVector(intV);
Iterator unt Traversal Vector
#include <iostream>
#include <vector>
using namespace std;
void printVector(vector<int>& iV) {
vector<int>::iterator iter;
cout << "V = [ ";
for (iter = iV.begin(); iter != iV.end();
++iter) cout << *iter << " ";
cout << "]" << endl;
}
int main() { return 0;
vector<int> intV; }
for (int i = 0; i != 5; ++i) Output:
intV.push_back(i); V = [ 0 1 2 3 4 ]
printVector(intV);
system("pause");
Iterator unt insert() dan erase() (1)
#include <iostream>
#include <vector>
using namespace std;
void printVector(vector<int>& iV) {
vector<int>::iterator iter;
cout << "V = [ ";
for (iter = iV.begin(); iter != iV.end();
++iter) cout << *iter << " ";
cout << "]" << endl;
}
int main() {
vector<int> intV;
for (int i = 0; i != 5; intV.push_back(i);
++i) printVector(intV);
Output:
V = [ 0 1 2 3 4 ]
Iterator unt insert() dan erase() (2)
V = [ -1 0 1 2 3 4 ] ?
vector<int>::iterator myIter = intV.begin();
Output:
intV.insert(myIter, -1);
printVector(intV);
myIter++;
intV.erase(myIter);
print_vector(intV);
cout << *myIter << endl;
system("pause");
return 0;
}
Iterator untuk insert() dan erase() (2)
vector<int>::iterator myIter =
intV.begin();
intV.insert(myIter,
Output:
-1);
V = [ -1 0 1 2 3 4 ]
printVector(intV);
myIter++;
intV.erase(myIter);
print_vector(intV);
cout << *myIter <<
endl; system("pause");
return 0;
}
vector<int>::iterator myIter =
intV.begin();
intV.insert(myIter, -1);
Output:
printVector(intV);
V = [ -1 0 1 2 3 4 ]
myIter++;
intV.erase(myIter);
tV);
Output: ?
printVector(in
cout << *myIter <<
endl; system("pause");
return 0;
}
V = [ -1 1 2 3 4 ] 1
Iterator untuk insert() dan erase() (2)
vector<int>::iterator myIter =
intV.begin();
intV.insert(myIter, -1);
printVector(intV);
myIter++;
intV.erase(myIter);
printVector(intV);
?
cout << *myIter << endl;
system("pause");
return 0;
} V = [ -1 0 1 2 3 4 ]
Output:
V = [ -1 1 2 3 4 ] 1
Output:
(2)vector<int>::iterator myIter =
intV.begin();
intV.insert(myIter, V = [ -1 0 1 2 3 4 ]
-1);
printVector(intV);
Output:
myIter++; V = [ -1 1 2 3 4 ] 1
intV.erase(myIter);
myIter menunjuk ke elemen
printVector(intV);
sesudahnya pada posisi yg
cout << *myIter << sama
endl; system("pause");
return 0;
}
Output:
#include <iostream>
#include <vector>
int main () {
vector<int> myvector (3,100);
vector<int>::iterator it;
it = myvector.begin();
it = myvector.insert ( it , 200 );
myvector.insert (it,2,300);
it = myvector.begin();
vector<int> anothervector(2,400);
myvector.insert(it+2,anothervector.begin(),anothervector.end());
int myarray [] = { 501,502,503 };
myvector.insert (myvector.begin(), myarray, myarray+3);
cout << "myvector contains:";
for (it=myvector.begin();
it<myvector.end(); it++) cout << '
' << *it;
cout << '\n’;
?
Output:
return 0;
}
#include <iostream>
#include <vector>
int main () {
vector<int> myvector (3,100);
vector<int>::iterator it;
it = myvector.begin();
it = myvector.insert ( it , 200 );
myvector.insert (it,2,300);
it = myvector.begin();
vector<int> anothervector(2,400);
myvector.insert(it+2,anothervector.begin(),anothervector.end());
int myarray [] = { 501,502,503 };
myvector.insert (myvector.begin(), myarray, myarray+3);
cout << "myvector contains:";
for (it=myvector.begin(); it<myvector.end(); it++)
cout << ' ' << *it;
cout << '\n’;
return 0;
}
Output:
100 100
myvector contains: 501 502 503 300 300 400 400 200 100
#include <iostream>
#include <vector>
int main () {
vector<int> myvector;
for (int i=1; i<=10; i++)
myvector.push_back(i);
myvector.erase (myvector.begin()+5);
myvector.erase (myvector.begin(),myvector.begin()+3);
cout << "myvector contains:"; return 0;
for (int i=0;
i<myvector.size(); ++i) cout
<< ' ' << myvector[i]; }