BAB
13.
Kontainer
Runtun: vector, list, dan deque
13.1 Pengantar
Beberapa fitur dari kontainer telah didiskusikan pada Bab 12. Kontainer
runtun terdiri-dari tiga kontainer, yaitu vector, list, dan deque (double ended queue). Fitur-fitur
komparatif dari ketiganya ditampilkan pada Tabel 13.1.
TABEL 13.1 Sejumlah fitur dari kontainer vector, list, dan deque
vector
file header
<vector>
|
list
file header
<list>
|
deque
file header <deque>
|
Mendukung iterator acak. Akses cepat terhadap sembarang
elemen.
|
Mendukung
iterator dwi-arah (bidirectional). Iterator dapat diinkremen atau didekremen.
|
Mendukung iterator acak. Akses cepat terhadap sembarang
elemen di dalam deque.
|
Karena mendukung iterator acak, semua algoritma STL dapat
digunakan pada vector.
|
Algoritma-algoritma
STL untuk membaca/menyimpan/menampilkan, dan iterator maju (forward) dan
iterator dwi-arah dapat diterapkan pada list.
|
Karena mendukung iterator acak, semua algoritma STL dapat
digunakan pada deque.
|
Penyisipan dan penghapusan cepat di ujung belakang vector.
|
Penyisipan dan
penghapusan cepat di mana saja di dalam list.
|
Penyisipan dan
penghapusan cepat di kedua ujung deque.
|
Data disimpan pada lokasi-lokasi memori secara sekuensial
seperti array.
|
Struktur data
semacam senarai berantai ganda (doubly linked list).
|
Berbasis struktur data seperti array. Akses langsung
dilakukan menggunakan operator indeks.
|
Fungsi-fungsi yang umum digunakan dicantumkan pada Tabel 13.2.
|
Fungsi-fungsi yang umum digunakan dicantumkan pada Tabel 13.3
dan Tabel 13.4.
|
Fungsi-fungsi yang umum digunakan dicantumkan pada Tabel 13.5.
|
13.2 Kelas
vector
DEKLARASI VEKTOR
Seperti yang telah disebutkan, kelas vector
merupakan sebuah kelas kontainer dan elemen-elemennya disimpan di dalam
lokasi-lokasi memori secara sekuensial seperti array. Vektor di dalam C++ tidak
sama dengan vektor dalam Matematika meskipun beberapa konsep ada kesamaan.
Vektor C++ dapat memiliki sembarang banyak komponen.
Vektor dipandang sebagai array yang lebih handal dan dinamis. Di samping
itu, kelas vector mendukung banyak
fungsi yang tidak bisa diterapkan pada array-array berbasis pointer seperti
operasi penyisipan dan penghapusan elemen. Vektor merupakan sebuah array
dinamis karena ia dapat mengalokasikan memori tambahan secara mandiri bila
diperlukan saat adanya penambahan elemen. Pada saat permulaan, alokasi memori
yang diberikan kecil yang cukup untuk beberapa elemen saja. Jika jumlah elemen
bertambah selama eksekusi program, vektor akan mengalokasikan segmen memori
tambahan yang lebih besar. Sementara itu, array memiliki panjang runtun yang
tetap (jumlah elemen tetap saat deklarasi). Pada kasus array, elemen individu
dapat ditugaskan, sedangkan array secara menyeluruh tidak dapat ditugaskan.
Vektor dapat ditugaskan secara menyeluruh. Agar dapat bekerja dengan vektor,
Anda perlu mencantumkan file header <vector>
dan perlu mendeklarasikan tipe data dari elemen-elemen vektor, seperti int, double, char, atau
lainnya di dalam kurung siku (<>). Beberapa contoh deklarasi vektor
diberikan sebagai berikut:
#include <vector> //File header
vector <int> V1; //V1 adalah vektor dengan
elemen-elemen int
vector <double>
V2; //V2 adalah vektor dengan
elemen-elemen double
vector <char> Vekt; //Vekt adalah vektor dengan
elemen-elemen char
Pada deklarasi-deklarasi tersebut, V1, V2, dan Vekt merupakan pengenal
atau nama vektor. Elemen-elemen dari vektor V1 bertipe int, elemen-elemen dari vektor V2 bertipe double, dan elemen-elemen dari vektor Vekt bertipe char.
Lebih dari satu vektor dapat dideklarasikan pada baris yang sama jika
tipenya sama. Anda perlu menuliskan tipe data di dalam kurung siku hanya sekali
saja setelah nama kelas vector.
Sebagai contoh, Anda dapat mendeklarasikan sejumlah vektor sebagai berikut:
vector <int> V1,
V3 ;
vector <double> A, B, C ;
KONSTRUKTOR DAN DESTRUKTOR DARI KELAS vector
Kelas vector memiliki sejumlah
konstruktor. Konstruktor-konstruktor tersebut diberikan sebagai berikut:
vector <double>
V(5); /*Menciptakan sebuah
vektor dengan 5 elemen bertipe
double dan nilai 0*/
vector <int>
V1(4,35); /*Menciptakan
V1 dengan 4 elemen bertipe int dan
nilai 35*/
vector <int> V4
(V1); //Menciptakan vektor V4
sebagai salinan dari vektor V1
vector <char> V2 (
4, ‘D’) ; /*Menciptakan
vektor V2 dengan 4 elemen bertipe char dan
nilai ‘D’*/
~vector (); /*Destruktor dari kelas
vector, yang menghapus semua
elemen dari vektor*/
Program berikut mengilustrasikan sejumlah metode dalam menciptakan vektor.
Pengaksesan elemen vektor dilakukan dengan menggunakan operator [], seperti
yang dilakukan pada array.
Program 13.1 Mengilustrasikan
konstruksi dari vektor dan menampilkan elemen-elemennya
|
|
|
#include<iostream>
#include<vector>
using namespace std;
vector <double> V(4); // ukuran = 4, nilai
masing-masing elemen = 0
vector <int> V1(4,35); // ukuran = 4, nilai masing-masing
elemen = 35
int main()
{
vector<double> V2(4, 4.5); //ukuran
= 4, nilai masing-masing elemen = 4.5
vector<char> V3(4, 'B'); //vektor
V3 memiliki empat elemen,
//dengan nilai
masing-masing elemen adalah ‘B’.
vector<int> V4(V1); //V4 adalah salinan dari V1
vector<int> V5 ;
for(int i =0; i<4;i++ ) //Menciptakan sebuah vektor dengan 4
elemen.
V5.push_back (5); //Masing-masing elemen bernilai 5.
cout<<"V \tV1\tV2\tV3
\tV4"<<"\tV5"<<endl;
for
(int j = 0; j< 4; j++)
// loop for untuk menampilkan keluaran
cout
<<V[j]<<"\t"<< V1[j]<<"\t"
<<V2[j]<<"\t"<< V3[j]
<<"\t"<<
V4[j]<<"\t"<<V5[j]<<endl
;
return
0;
}
|
KELUARAN
|
|
V V1
V2 V3 V4
V5
0 35
4.5 B 35
5
0 35
4.5 B 35
5
0 35
4.5 B 35
5
0 35
4.5 B 35
5
|
Vektor V memiliki 4 elemen, yang masing-masing bernilai 0, vektor V1, V2,
dan V3 dikonstruksi dengan cara yang sama. Nilai-nilai elemen dari ketiganya
adalah 35, 4.5, dan ‘B’. Vektor V4 merupakan salinan dari V1. Vektor V5
dikonstruksi menggunakan fungsi push_back().
Fungsi ini menambahkan elemen-elemen di belakang vektor. Pada kasus ini, semua
nilai yang ditempatkan ke dalam vektor adalah 5.
13.3 Fungsi-Fungsi
dari Kelas vector
Ada sejumlah fungsi dari kelas vector
yang dapat dipakai untuk memanipulasi elemen-elemen runtun. Sejumlah fungsi
tersebut diberikan pada Tabel 13.2.
TABEL 13.1 Fungsi-fungsi yang didukung oleh kelas vector
No
|
Fungsi
|
Penjelasan
|
1
|
assign()
|
Fungsi ini menugaskan nilai-nilai kepada sebuah vektor
dari awal sampai akhir. Fungsi ini juga digunakan untuk menugaskan sejumlah
salinan dari suatu nilai kepada sebuah vektor. Isi sebelumnya di dalam vektor
akan dihapus.
|
2
|
at()
|
Fungsi ini menghasilkan sebuah referensi yang menunjuk ke
suatu elemen di dalam sebuah vektor pada lokasi yang ditetapkan (dituliskan
di dalam kurung siku).
|
3
|
back()
|
Fungsi ini menghasilkan referensi yang menunjuk ke elemen
terakhir di dalam vektor.
|
4
|
begin()
|
Fungsi ini menghasilkan referensi yang menunjuk ke elemen
pertama di dalam vektor.
|
5
|
capacity()
|
Fungsi ini menghasilkan jumlah elemen yang dapat ditampung
oleh vektor pada alokasi memori terkini. Jumlah elemen tersebut bukanlah
jumlah elemen aktual di dalam vektor.
|
6
|
clear()
|
Fungsi ini menghapus semua elemen di dalam vektor.
|
7
|
empty()
|
Fungsi ini menghasilkan true jika tidak ada elemen di dalam vektor, sebaliknya
menghasilkan false.
|
8
|
end()
|
Fungsi ini menghasilkan iterator yang menunjuk ke posisi
setelah akhir vektor.
|
9
|
erase()
|
Fungsi ini menghapus elemen pada lokasi berindeks atau
menghapus elemen-elemen di antara iterator awal dan iterator akhir. Elemen
awal (yang ditunjuk oleh iterator) termasuk yang dihapus tetapi elemen akhir
(yang ditunjuk oleh iterator) tidak dihapus.
|
10
|
front()
|
Fungsi ini menghasilkan sebuah referensi yang menunjuk ke
elemen pertama di dalam vektor.
|
11
|
insert()
|
Fungsi ini menyisipkan elemen-elemen di dalam vektor: yaitu
(i) satu nilai atau (ii) sejumlah salinan dari sebuah nilai pada lokasi
tertentu, (iii) menyisipkan dari awal sampai akhir tepat sebelum sebuah
lokasi.
|
12
|
max_size()
|
Menghasilkan jumlah elemen maksimum yang dapat ditampung
oleh sebuah vektor.
|
13
|
pop_back()
|
Menghapus elemen akhir di dalam vektor.
|
14
|
push_back()
|
Menempakan elemen di belakang vektor.
|
15
|
rbegin()
|
Menghasilkan sebuah iterator balik ke akhir vektor.
|
16
|
rend()
|
Menghasilkan sebuah iterator balik ke awal vektor.
|
17
|
reserve()
|
Mengubah kapasitas vektor menjadi ukuran terkecil.
|
18
|
resize()
|
Mengubah ukuran vektor menjadi ukuran yang ditetapkan.
|
19
|
size()
|
Menghasilkan jumlah elemen terkini di dalam vektor.
|
20
|
swap()
|
Menukar isi dari dua vektor.
|
13.4 Definisi
dan Aplikasi dari Iterator
Iterator itu seperti pointer. Iterator dipakai untuk menjelajah
elemen-elemen dari sebuah vektor. Deklarasi dari iterator, katakanlah, untuk
vektor V1 yang bertipe int
diilustrasikan berikut. Pada deklarasi berikut,
iterator tersebut diinisialisasi dengan V1.begin(), yaitu nilai yang berkaitan dengan elemen pertama dari
vektor V1.
GAMBAR 13.1 Deklarasi dan penugasan iterator
Sesuai dengan deklarasi pada gambar di atas, Iter adalah nama iterator. Iterator ini diinisialisasi dengan nilai
yang berkaitan dengan elemen pertama pada vektor. Nilai itu dapat diinkremen
untuk menjangkau elemen-elemen lain pada vektor. Jadi, Iter + 1 akan menunjuk ke elemen kedua pada vektor. Sama halnya, Iter + 2 menunjuk ke elemen ketiga dan
seterusnya. Anda perlu mengetahui bahwa V1.end()
menunjuk ke posisi setelah elemen terakhir dari vektor. Nilai-nilai elemen di
dalam vektor juga dapat diperoleh menggunakan operator dereferensi (*). Jadi,
nilai dari elemen pertama pada vektor adalah *Iter, nilai dari elemen kedua adalah *(Iter + 1), dan seterusnya. Lihat program berikut untuk ilustrasi.
Program 13.2 Mengilustrasikan
konstruksi dari vektor dan menampilkan elemen-elemennya
|
|
|
#include<iostream>
#include<vector>
using namespace std;
vector<int> V1, V2 ; //deklarasi dari dua vektor
int main()
{
V1.push_back(10); //Menggunakan fungsi push_back() untuk menciptakan V1
V1.push_back(20);
V1.push_back(30);
vector<int> :: iterator iter = V1.begin(); //iterator untuk V1
cout<<*iter<<"\t"<<*(iter+1)<<"\t"<<*(iter
+2) <<endl;
cout<<iter<<"\t"<<iter+1<<"\t"<<iter+2
<< endl;
cout<<"Elemen-elemen dari
vektor V2 adalah sebagai berikut:\n ";
for
(int i =0;i< 6; i++)
V2.push_back(i*i); //menciptakan vektor V2
iter = V2.begin(); //iterator untuk V2
while
(iter != V2.end())
{
cout <<*iter <<"
";
iter++;
}
cout<<endl;
return
0;
}
|
KELUARAN
|
|
10 20 30
006616B0 006616B4 006616B8
Elemen-elemen
dari vektor V2 adalah sebagai berikut:
0 1 4 9 16 25
|
Dengan bantuan fungsi push_back(),
tiga elemen ditempatkan ke dalam V1. Elemen-elemen tersebut ditambahkan pada
elemen-elemen yang telah ada. Nilai dari ketiga elemen tersebut adalah 10, 20,
dan 30. Untuk menampilkan nilai dari ketiga elemen, iterator iter diinisialisasi dengan V1.begin(). Jadi, *iter adalah nilai dari elemen pertama, *(iter + 1) menghasilkan nilai dari elemen kedua, dan *(iter + 2) menghasilkan nilai dari
elemen ketiga dan seterusnya. Nilai dari iter,
iter + 1, dan iter + 2 adalah alamat-alamat dari elemen. Sama halnya, elemen-elemen
dari V2 diekstrasi dengan bantuan loop dengan iterator iter.
13.5 Operator-Operator
yang Didukung oleh Kelas vector
Dua vektor dapat dibandingkan dengan operator-operator seperti ==, >,
<, >=, <=, dan !=. Sebuah vektor dapat ditugaskan kepada vektor lain
sama seperti ketika Anda menugaskan variabel-variabel bertipe fundamental. Ini
diilustrasikan sebagai berikut:
vector<int> V1(5,
50), V2;
V2 = V1;
Pada kode tersebut, dua vektor dideklarasikan. Vektor V1 diinisialisasi
dengan 5 elemen yang bernilai 50. Vektor V1 ditugaskan kepada V2, jadi V2
menjadi salinan dari vektor V1. Ekualitas dari dua vektor dapat diuji
menggunakan operator ==. Dua vektor dikatakan sama jika ukurannya sama dan
setiap elemen vektor pertama pada lokasi i sama dengan elemen pada lokasi i
dari vektor kedua. Operasi-operasi aritmatika juga bisa diterapkan pada
elemen-elemen individual dari sebuah vektor. Program berikut mengilustrasikan
aplikasi dari sejumlah operator ini.
13.6 Aplikasi
dari Fungsi-Fungsi dari Kelas vector
Sejumlah fungsi yang didukung oleh kelas vector dicantumkan pada Tabel 13.2 berikut dengan penjelasan
singkat tentang aksi masing-masing fungsi. Beberapa fungsi tersebut akan
dijelaskan berikut.
FUNGSI assign()
Dimisalkan V adalah sebuah vektor, dimana ke dalamnya nilai-nilai akan
ditugaskan. Jika semua komponen bernilai sama, maka Anda dapat menugaskan
nilai-nilai sebagai berikut:
V.assign(6, 80);
Sesuai dengan kode tersebut, vektor V ditugasi 6 elemen dan setiap elemen
memiliki nilai 80. Jadi, vektor V memiliki elemen-elemen 80, 80, 80, 80, 80,
dan 80. Fungsi assign() menghapus
elemen-elemen yang telah ada sebelumnya di dalam vektor. Fungsi push_back() juga bisa dipakai untuk
menempatkan nilai-nilai ke dalam vektor. Fungsi itu menempatkan nilai-nilai
(yang dituliskan di dalam kurung siku) di belakang vektor. Jadi, jika
diinginkan untuk menambahkan sebuah elemen baru pada vektor V di belakang
vektor, maka sintaksisnya adalah:
V.push_back(35);
Dengan penambahan 35, vektor V sekarang memiliki elemen-elemen 80, 80, 80,
80, 80, 80, dan 35.
Program 13.3 Mengilustrasikan
aplikasi dari fungsi assign(), push_back(), dan sejumlah operator
|
|
|
#include<iostream>
#include<vector>
#include <string>
using namespace std;
vector<int> V1, V2, V3, V4;
vector<string>
V5;
int main()
{
V1.assign(5,5); //V1 is assigned 5 values
each equal to 5.
V2.assign(5,4); //V2 is assigned 5 values
each equal to 4.
V3 = V2; // vector V2 is assigned to
vector V3
string Str [] = {"Nimi"
,"Simi", "Jimmi", "Ginni", "Pinni"};
int
Array[] = {1, 2, 3, 4, 5};
for
(int j =0; j<5 ;j++)
{
V4.push_back (Array[j]);
V5.push_back (Str[j]);
}
//elemen-elemen dari array Str ditempatkan
ke vektor V5
if(V2
== V3)
{
cout<<"V2 dan V3
sama"<<endl;
}
else
cout<<" V2 dan V3 tidak
sama"<<endl;
cout<<"V1 \tV2 \tV3 \tV4 \t
V5"<<endl ;
for
(int i = 0; i< 5; i++)
cout<<V1[i]<<"\t"<<V2[i]<<"\t"<<V3[i]<<"\t"<<V4[i]<<"\t"<<V5[i]<<endl;
cout<<"Alamat dari V3 =
"<<&V3<<endl ;
for
(int k=0;k< 5 ;k++)
V2[k] *= V1[k] ;
cout<<"Komponen-komponen dari
V2 sekarang = ";
for
(int m =0; m<5; m++)
cout<<V2.at(m) <<"
";
cout<<"\n";
return
0;
}
|
KELUARAN
|
|
V2 dan V3 sama
V1 V2
V3 V4 V5
5 4
4 1 Nimi
5 4
4 2 Simi
5 4
4 3 Jimmi
5 4
4 4 Ginni
5 4
4 5 Pinni
Alamat dari V3
= 0047B780
Komponen-komponen
dari V2 sekarang = 20 20 20 20 20
|
Pada program di atas, Anda memperoleh ilustrasi dari penggunaan fungsi assign() dan at(). Selain itu, program memiliki sebuah vektor, yang
elemen-elemennya berupa string. Penampilan elemen-elemen vektor dilakukan oleh
operator [] seperti array. Elemen-elemen individual dari sebuah vektor dapat
dikenai operasi-operasi aritmatika sama seperti variabel biasa.
FUNGSI size() dan capacity()
Fungsi size() menghasilkan
jumlah elemen aktual di dalam vektor, sedangkan fungsi capacity() menghasilkan jumlah elemen maksimum yang dapat dimuat
oleh vektor dengan alokasi memori terkini. Vektor merupakan sebuah array
dinamis, dimana ketika jumlah elemen bertambah melebihi kapasitas yang
teralokasi, vektor akan diberikan tambahan memori yang lebih besar.
Program 13.4 Mengilustrasikan
aplikasi dari fungsi size(), capacity(), end(), begin(), push_back(),
pop_back()
|
|
|
#include<iostream>
#include<vector>
using namespace std;
vector<int> V;
int main()
{
for
(int i =1; i<=5;i++)
V.push_back (i*i); //5 nilai:1, 4, 9, 16, 25 ditempatkan ke
dalam V
cout<<"Ukuran dari V =
"<< V.size()<<endl;
cout<<"Kapasitas dari V =
"<< V.capacity()<<endl;
cout<<"Elemen-elemen dari
vektor V adalah: "<<endl;
for
(int j = 0; j<=4; j++)
cout <<" "<<
V[j]<<" ";
cout<<endl;
V.pop_back(); //Elemen akhir (25) dihapus
cout<<"Setelah pop_back, ukuran
dari V adalah = "<<V.size()<<endl;
cout<<"Kapasitas dari V =
"<<V.capacity()<<endl;
for
(int k =1; k< 6; k++)
V.push_back (2*k); //5 nilai: (2, 4, 6, 8, 10) ditempatkan ke
dalam V
cout<<"Sekarang ukuran dari V
adalah = "<<V.size();
cout<<"\nSekarang kapasitas
dari V adalah = "<< V.capacity();
vector<int> :: iterator itr; //deklarasi
dari iterator itr
cout<<"\nSetelah pop_back,
elemen-elemen dari V adalah: "<<endl;
for
(itr = V.begin(); itr < V.end (); itr ++)
cout<<*itr <<" "
; //menampilkan nilai dari tiap elemen dengan iterator
cout<<endl;
return
0;
}
|
KELUARAN
|
|
Ukuran dari V =
5
Kapasitas dari
V = 8
Elemen-elemen
dari vektor V adalah:
1
4 9 16
25
Setelah
pop_back, ukuran dari V adalah = 4
Kapasitas dari
V = 8
Sekarang ukuran
dari V adalah = 9
Sekarang
kapasitas dari V adalah = 16
Setelah
pop_back, elemen-elemen dari V adalah:
1 4 9 16 2 4 6
8 10
|
Keluaran program tersebut mengilustrasikan perbedaan antara fungsi capacity() dan fungsi size(). Fungsi capacity() menghasilkan jumlah elemen maksimum yang dapat dimuat
oleh vektor dengan alokasi memori sekarang sedangkan fungsi size() menghasilkan jumlah elemen
aktual. Vektor adalah array dinamis. Jumlah elemen dapat bertambah atua
berkurang selama eksekusi program. Jika jumlah elemen bertambah dan vektor
memerlukan lebih dari memori yang awalnya dialokasikan, maka vektor akan
diberikan tambahan memori yang lebih besar. Pengalokasian ini dilakukan secara
otomatis dan elemen-elemen yang telah ada disalin ke lokasi baru. Keluaran
program tersebut menunjukkan bahwa ketika elemen bertambah menjadi 9, kapasitas
bertambah dari 8 menjadi 16.
Fungsi push_back() menambahkan
elemen di belakang vektor dan pop_back()
menghapus elemen akhir dari vektor.
FUNGSI at()
Pada kasus array, tidak ada pemeriksaan untuk melihat apakah sebuah nilai
indeks melebihi jumah elemen array atau tidak. Adalah memungkinkan bahwa nilai
indeks bisa melebihi jumlah elemen di dalam array. Pada kelas vector, pengawalan dilakukan oleh
fungsi at(). Dengan kode V.at(k), dimana k adalah nilai indeks,
kode itu menghasilkan nilai elemen dari vektor V pada lokasi k. Jika nilai
indeks melebihi jumlah elemen, maka fungsi at()
akan memberikan peringatan dan menghentikan program, seperti diilustrasikan
pada program berikut.
Program 13.5 Mengilustrasikan
aplikasi dari fungsi at()
|
|
|
#include<iostream>
#include<vector>
using namespace std;
vector<int> V;
int main()
{
V.assign(6,8); //menugaskan 6 nilai,
masing-masing nilai 8, kepada V
for
(int i = 0; i< 6; i++)
cout<<V[i] <<" ";
cout<<"\n";
for(int j=0;j< 6 ;j++)
{
V[j] = j*V[j]; //setiap elemen dikali
dengan nilai indeksnya
cout <<V[j]<<" ";
}
cout<<"\n";
for
(int k =0; k<8; k++)
//Perhatikan bahwa nilai maks dari k lebih
dari jumlah elemen
cout<<"Elemen
"<<k<<" = "<<V.at(k)<<endl;
return
0;
}
|
KELUARAN
|
|
8 8 8 8 8 8
0 8 16 24 32 40
Elemen 0 = 0
Elemen 1 = 8
Elemen 2 = 16
Elemen 3 = 24
Elemen 4 = 32
Elemen 5 = 40
abnormal
program termination
|
Pada program di atas, vektor V memiliki 6 elemen, masing-masing dengan
nilai 8 dan ini ditampilkan pada baris pertama dari keluaran. Nilai-nilai
tersebut kemudian dikalikan dengan nilai indeksnya masing-masing di dalam
vektor, jadi nilai-nilai sekarang 0, 8, 16, 32, dan 40 seperti ditampilkan pada
baris kedua dari keluaran. Nilai-nilai ini diprogram untuk ditampilkan dengan
fungsi at(k), dimana k bervariasi dari 0 sampai 7, yaitu 2 lebih dari jumlah
elemen. Program kemudian menampilkan 6 elemen pertama dan setelah itu program
berhenti karena nilai indeks lebih dari jumlah elemen aktual di dalam vektor.
Program 13.6 Mengilustrasikan
aplikasi dari fungsi erase() dan front()
|
|
|
#include<iostream>
#include<vector>
using namespace std;
vector<int> V2(2); //V2 memiliki dua elemen, masing-masing nilai 0.
vector<double> V4;
int main()
{
for
(int i = 1; i<6; i++)
{
V2.push_back (i*i); //5 nilai (1, 4, 9, 16, 25) ditempatkan ke
dalam V2
V4.push_back (i*2.5); //5 nilai
ditempatkan ke dalam V4
}
cout<<"\nV4 = ";
vector<double>:: iterator itr4;
for(itr4
= V4.begin(); itr4 != V4.end(); itr4++)
cout<< *itr4<<"
"; //menampilkan elemen-elemen dari V4
vector<int> :: iterator itr;
cout<<"\nSekarang V2 = ";
for(itr
= V2.begin(); itr != V2.end(); itr++)
cout<<*itr<<" " ;
cout<<"\nSetelah menghapus dua
elemen pertama, V2 = ";
if
( V2.front() ==0)
V2.erase(V2.begin(),V2.begin()+2);
//menghapus elemen pertama dan kedua.
Elemen ketiga tidak dihapus
for(itr
= V2.begin(); itr != V2.end(); itr++)
cout<< *itr<<" ";
//statemen keluaran
V2.pop_back( );
V2.pop_back();
cout<<"\nSetelah dua kali
pop-back, V2 = ";
for(
itr = V2.begin(); itr != V2.end(); itr++)
cout<< *itr<<" ";
cout<<endl;
return
0;
}
|
KELUARAN
|
|
V4 = 2.5 5 7.5
10 12.5
Sekarang V2 = 0
0 1 4 9 16 25
Setelah
menghapus dua elemen pertama, V2 = 1 4 9 16 25
Setelah dua
kali pop-back, V2 = 1 4 9
|
Pada program berikut, sejumlah operasi dengan operator-operator relasional
seperti ==, <, >, <=, >=, dan lainnya, diterapkan dengan cara yang
sama seperti tipe-tipe fundamental.
Program 13.7 Mengilustrasikan kegunaan
dari operator-operator relasional pada vektor
|
|
|
#include<iostream>
#include<vector>
using namespace
std;
vector<int> V1;
vector<int> V2;
vector<int> V3;
vector<int> V4;
int main()
{
V2.assign(5, 65); //menugaskan 5 elemen, masing-masing 65, kepada V2
V3.assign(5, 70); //menugaskan 5 elemen, masing-masing 70, kepada V3
V1.push_back(2); //push_back menempatkan nilai 2 di belakang vektor V1
V1.push_back(4); //push_back menempatkan nilai 4 di belakang vektor V1
V1.push_back(5);
V1.push_back(6);
V1.push_back(7);
if
(V2 == V1) // uji ekualitas
cout<< "Vektor V1 dan V2
sama"<<endl;
else
cout<<"Vektor V1 dan V2
tidak sama"<<endl;
V2 = V1; //V1 ditugaskan kepada V2
cout<<"Setelah penugasan:
" << endl;
if(V1!=
V2)
cout<<"Vektor V1 tidak sama dengan
V2"<<endl;
else
cout<<"Vektor V1 dan V2
sama."<<endl;
cout<<"Elemen-elemen dari V2
adalah berikut: "<<endl;
for
(int i = 0; i< 5; i++)
cout<<"
V2["<<i<<"] = "<<V2[i]<<endl;
return
0;
}
|
KELUARAN
|
|
Vektor V1 dan
V2 tidak sama
Setelah
penugasan:
Vektor V1 dan
V2 sama.
Elemen-elemen
dari V2 adalah berikut:
V2[0] = 2
V2[1] = 4
V2[2] = 5
V2[3] = 6
V2[4] = 7
|
FUNGSI insert()
Fungsi insert() mengambil tiga
argumen, dimana argumen pertama merupakan lokasi di mana penyisipan diinginkan,
argumen kedua merupakan jumlah penyisipan, dan argumen ketiga adalah nilai dari
tiap penyisipan. Lihat program berikut untuk ilustrasi.
Program 13.8 Mengilustrasikan
penyisipan pada lokasi-lokasi tertentu
|
|
|
#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
vector<int> V1;
vector<double> V2 ;
vector<char> V3;
void main()
{
for
(int i =0; i<=4;i++)
{
V1.push_back (i+2 ); //menciptakan
sebuah vektor
V2. push_back (sqrt(i+2));
V3.push_back (65 + i);
}
vector<int>::iterator K1 = V1.begin();
vector<double>::iterator K2 = V2.begin();
vector<char>::iterator K3 = V3.begin();
cout <<"Sebelum penyisipan:
"<<endl;
cout <<"V1\tV2\t
V3"<<endl;
while
(K1 != V1.end())
{
cout
<<*K1<<"\t"<<*K2<<"\t"<<
*K3<<endl;
K1++;
K2++;
K3++;
}
vector<int>::iterator A1 = V1.begin();
vector<double>::iterator A2 = V2.begin();
vector<char>::iterator A3 = V3.begin();
V1.insert(A1 ,3,9); //menyisipkan tiga buah nilai 9 di awal dari V1.
V2.insert(A2+2,3,10.5); /*menyisipkan tiga elemen masing-masing
bernilai
10.5 pada lokasi ke-3.*/
V3.insert (A3+3,3,'A'); /*menyisipkan tiga
elemen masing-masing bernilai
3 pada lokasi ke-4.*/
cout<<"Setelah penyisipan:
"<<endl;
cout <<"V1\tV2\t
V3"<<endl;
while
(A1 != V1.end())
{
cout<<*A1<<"\t"<<*A2<<"\t"<<*A3<<
endl;
A1++;
A2++;
A3++;
}
}
|
KELUARAN
|
|
Sebelum
penyisipan:
V1 V2
V3
2 1.41421 A
3 1.73205 B
4 2
C
5 2.23607 D
6 2.44949 E
Setelah
penyisipan:
V1 V2
V3
9 1.41421 A
9 1.73205 B
9 10.5
C
2 10.5
A
3 10.5
A
4 2
A
5 2.23607 D
6 2.44949 E
|
Sebelum penyisipan V1 memiliki elemen-elemen 2, 3, 4, 5, dan 6. Vektor V2
memiliki elemen-elemen yang merupakan akar kuadrat dari elemen-elemen dari V1
dan vektor V3 memiliki elemen-elemen A, B, C, D, dan E. Dalam V1, tiga elemen,
yang masing-masing bernilai 9, disisipkan di awal vektor tersebut. Dalam V2,
tiga elemen, yang masing-masing bernilai 10.5, disisipkan di lokasi ketiga di
dalam vektor tersebut. Sama halnya, tiga A disisipkan di posisi keempat di
dalam vektor V4.
13.7 Fungsi-Fungsi
dan Operator-Operator yang Didukung oleh Kelas list
Kelas list merupakan kelas
kontainer sekuensial lain di dalam C++. Kelas list memiliki kemampuan penyisipan dan penghapusan cepat di mana
saja di dalam sebuah list. Kelas ini mendukung iterator dwi-arah (bidirectional). Banyak fungsi anggota
dari kelas list sama dengan yang ada
dari kelas vector. Fungsi-fungsi
yang sama untuk kelas vector dan
kelas list dicantumkan pada Tabel 13.3.
TABEL 13.3 Fungsi-fungsi anggota dari kelas list
sama dengan yang ada dari kelas vector.
assign()
|
back()
|
begin()
|
clear()
|
empty()
|
end()
|
erase()
|
front()
|
insert()
|
max_size()
|
pop_back()
|
push_back()
|
rbegin()
|
remove()
|
rend()
|
resize()
|
size()
|
swap()
|
|
|
TABEL 13.4 Fungsi-fungsi tambahan di dalam kelas list.
No
|
Fungsi
|
Penjelasan
|
1
|
merge()
|
Menggabungkan sebuah list dengan list lain.
|
2
|
pop_front()
|
Menghapus elemen pertama dari list.
|
3
|
push_front()
|
Menambahkan sebuah elemen di depan list.
|
4
|
remove()
|
Menghapus elemen-elemen dari list.
|
5
|
remove_if()
|
Menghapus elemen jika memenuhi predikat.
|
6
|
reverse()
|
Membalikkan list.
|
7
|
sort()
|
Mengurutkan list dengan tatanan menaik.
|
8
|
splice()
|
Fungsi ini menghapus elemen-elemen dari satu list ke list
lain.
|
9
|
unique()
|
Fungsi ini menghapus elemen-elemen duplikat bertetangga.
List diurutkan lebih dahulu untuk membuat elemen-elemen duplikat menjadi
bertetangga.
|
Kode-kode aplikasi untuk fungsi-fungsi yang diberikan pada Tabel 13.3 sama
dengan apa yang telah diberikan untuk kelas vector. Program-program berikut memberikan ilustrasi aplikasi dari
fungsi-fungsi tambahan yang dicantumkan pada Tabel 13.4. Kelas list mendukung operator-operator
relasional. Sebuah list dapat ditugaskan dengan operator = dan dibandingkan
dengan list lain dengan operator >, <, >=, <=, dan lainnya. Program
berikut mengiliustrasikan konstruksi list oleh sejumlah metode.
Program 13.9 Mengilustrasikan
aplikasi dari fungsi assign(), push_back(), begin(), end(), dan operator =
dan == untuk list
|
|
|
#include <iostream>
#include <list>
#include <string>
using namespace std;
list <int> L1, L2, L3 ;
//mendeklarasikan tiga list bertipe int.
list
<string> L4; //mendeklarasikan
list yang memuat string-string.
void main()
{
for
(int i=1; i<6;i++)
L1.push_back(i*i ); //menempatkan nilai-nilai dengan push_back()
L2.assign (5, 75); //menempatkan nilai-nilai dengan assign()
L3 = L1; //konstruktsi
list dengan penugasan
const
int n =5;
string Nama[n]={"Kristof",
"Santi","Dwi", "Vivian", "Rosintan"};
for(int j=0; j<5; j++)
L4.push_back(Nama[j]);
//menempatkan nilai-nilai dalam bentuk
string-string
cout<<"List awal adalah sebagai
berikut: "<<endl;
cout<< "L1 = " ;
list<int>::iterator itr ; //deklarasi dari iterator
for(itr
= L1.begin(); itr !=L1.end(); itr ++)
cout<< *itr <<"
";
cout<<"\n";
cout<<"L2 = ";
for(itr
= L2.begin(); itr !=L2.end(); itr ++)
cout<<*itr <<" ";
L3 = L2;
cout<<"\n";
cout<<"L3 = ";
for(itr
= L3.begin(); itr !=L3.end(); itr ++)
cout<<*itr<<" ";
cout<<"\nL4 = ";
list<string>::iterator iter ;
for(iter
= L4.begin(); iter !=L4.end(); iter ++)
cout<< *iter <<"
";
L3 = L1 ; //L1
disalin ke L3
cout<<"\nL3 baru = ";
for(itr
= L3.begin(); itr !=L3.end(); itr ++)
cout<<*itr<<" ";
if
( L1 == L3) //perbandingan atas dua
string
cout<<"\nL1 dan L3
sama"<<endl;
else
cout<<"\nL1 dan L3 tidak
sama\n";
}
|
KELUARAN
|
|
List awal
adalah sebagai berikut:
L1 = 1 4 9 16
25
L2 = 75 75 75
75 75
L3 = 75 75 75
75 75
L4 = Kristof
Santi Dwi Vivian Rosintan
L3 baru = 1 4 9
16 25
L1 dan L3 sama
|
13.8 Aplikasi
dari Beberapa Fungsi dari Kelas list
FUNGSI unique(), reverse(), dan
remove()
Fungsi unique() menghapus
elemen-elemen duplikat dari list. Fungsi reverse()
membalikkan urutan elemen-elemen di dalam list, jadi elemen pertama menjadi
elemen terakhir dengan perubahan-perubahan urutan yang sama pada elemen-elemen
lain. Lihat program berikut untuk ilustrasi.
Program 13.10 Mengilustrasikan
aplikasi dari fungsi unique(), reverse(), dan remove()
|
|
|
#include<iostream>
#include<list>
using namespace std;
list<char> L1;
void main()
{
for
(int i=0; i<6;i++)
{
L1.push_back(73 - i);
L1.push_back(73 - i);
}
cout <<"List awal adalah
sebagai berikut: "<<endl;
list<char>::iterator T1;
for
( T1 = L1.begin() ; T1!=L1.end() ; T1++ )
cout <<" " <<*T1
;
cout <<endl;
L1.unique(); //menghapus salinan-salinan duplikat
cout <<"Setelah penghapusan
salinan duplikat, list menjadi: "<<endl;
for
( T1 = L1.begin() ; T1!=L1.end() ; T1++ )
cout <<" " <<*T1
;
L1.reverse();
cout<<"\nSetelah pembalikan
urutan, list menjadi: \n";
for
(T1 = L1.begin() ; T1!=L1.end() ; T1++ )
cout <<" " <<*T1
;
cout<<"\nSetelah penghapusan F,
list menjadi: \n";
L1.remove ('F');
for
(T1 = L1.begin() ; T1!=L1.end() ; T1++ )
cout <<" " <<*T1
;
cout <<endl;
}
|
KELUARAN
|
|
List awal
adalah sebagai berikut:
I I H H G G F F E E D D
Setelah
penghapusan salinan duplikat, list menjadi:
I H G F E D
Setelah
pembalikan urutan, list menjadi:
D E F G H I
Setelah
penghapusan F, list menjadi:
D E G H I
|
Keluaran dari program tersebut cukup mudah dipahami. Baris kedua dari
keluaran merupakan list awal yang memiliki beberapa elemen duplikat. Dengan
fungsi unique(), elemen-elemen
duplikat dihapus dan list hasil hanya memuat empat nilai unik (baris keempat dari
keluaran). Urutan elemen-elemen list kemudian dibalik. Pada list terbalik,
huruf F dihapus dengan fungsi remove().
Baris terakhir dari keluaran menunjukkannya.
Program 13.11 Mengilustrasikan
aplikasi dari fungsi begin(), swap(), end(), dan sort() pada list
|
|
|
#include<iostream>
#include<list>
using namespace std;
list<char> L1;
list<int> L2;
list<int> L3;
void main()
{
int
A[] = {78, 58, 90, 44, 33, 11};
for
(int i=0; i<6;i++)
{
L1.push_back(75 - i);
L2.push_back (A[i]);
L3. push_back(i*i);
}
cout<<"List awal adalah sebagai
berikut: "<<endl;
list<char>::iterator T1;
list <int>::iterator T2;
cout<<"List L1 = ";
for
(T1 = L1.begin() ; T1!=L1.end() ; T1++ )
cout <<" "
<<*T1<<" " ;
cout<<"\nList L2 = ";
for
(T2 = L2.begin() ; T2!=L2.end() ; T2++ )
cout <<" "
<<*T2<<" " ;
cout<<"\nList L3 = ";
for
(T2 = L3.begin() ; T2!=L3.end() ; T2++ )
cout <<" "
<<*T2<<" " ;
L3.sort();
L2.sort();
L2.swap(L3); //menukar elemen-elemen dari
dua list
cout<<"\nList terurut dan
tertukar adalah sebagai berikut: "<<endl;
cout<<"\nList L2 =" ;
for
(T2 = L2.begin() ; T2!= L2.end() ; T2++)
cout <<"
"<<*T2<<" " ;
cout<<"\nList L3 =" ;
for
(T2 = L3.begin() ; T2!= L3.end() ; T2++)
cout <<"
"<<*T2<<" " ;
}
|
KELUARAN
|
|
List awal
adalah sebagai berikut:
List L1 = K
J I H
G F
List L2 = 78
58 90 44
33 11
List L3 = 0
1 4 9
16 25
List terurut
dan tertukar adalah sebagai berikut:
List L2 =
0 1
4 9 16
25
List L3 =
11 33
44 58 78
90
|
Pada program tersebut, list L2 dan L3 ditukar dan diurutkan. Hal ini
terlihat pada keluaran program.
Program berikut mendeklarasikan sebuah list dengan elemen-elemen bertipe char dan dengan nama L1 dan dengan nama
L2 yang bertipe int. List L1
dikonstruksi dengan fungsi push_back().
List L2 ditugasi 5 elemen, dengan tiap elemen bernilai 50, dengan fungsi assign(). Fungsi L1.front() dan L1.back()
menghasilkan referensi ke elemen pertama dan ke elemen terakhir dari list L1.
Kedua list ditampilkan dengan bantuan iterator.
Program 13.12 Mengilustrasikan
aplikasi dari fungsi front(), back(), begin(), dan end() pada list
|
|
|
#include<iostream>
#include<list>
using namespace std;
list<char> L1 ;
list<int> L2;
int main()
{
for
(int i=0; i<5;i++)
{
L1.push_back(65+i);
L2.assign( 5, 50 );
}
list<char> ::iterator T1= L1.begin();
cout<<"List L1
adalah:"<<endl;
while
(T1 !=L1.end())
{
cout <<" "<<*T1
<<" ";
T1++;
}
cout<<"\n";
list <int> :: iterator T2 = L2.begin();
cout<<"List L2 adalah:
"<<endl;
while
(T2 !=L2.end())
{
cout<<"
"<<*T2<<" ";
T2++;
}
cout<<"\n";
cout<<"Elemen pertama dari L1
adalah: "<<L1.front()<<endl;
cout<<"Elemen terakhir dari L1
adalah: "<<L1.back()<<endl;
return
0;
}
|
KELUARAN
|
|
List L1 adalah:
A
B C D E
List L2 adalah:
50
50 50 50
50
Elemen pertama
dari L1 adalah: A
Elemen terakhir
dari L1 adalah: E
|
FUNGSI merge()
Jika list L2 perlu disambung dengan list L1, kode yang diperlukan
dituliskan berikut:
L1.merge(L2);
Setelah eksekusi program, list L2 menjadi kosong. Ini diilustrasikan pada
program berikut.
Program 13.13 Mengilustrasikan
aplikasi dari fungsi front(), back(), begin(), dan end() pada list
|
|
|
#include<iostream>
#include<list>
using namespace std;
list<int> L1,L2;
void main()
{
for
(int i=1; i<5;i++)
{
L1.push_back(i);
L2.push_back(i*i);
}
cout<<"List-list diberikan
sebagai berikut: "<<endl;
cout<<"List1\t List2
"<<endl;
list<int>::iterator T1;
list<int>::iterator T2;
for(T1=L1.begin(),T2=L2.begin();
T1 != L1.end() ;T1++,T2++ )
cout<<" "<<*T1
<<" \t "<< *T2 <<endl;
L1.merge(L2); //menyambung L2 dengan L1
cout<<"Lis list1 yang
baru:"<< endl;
for
(T1=L1.begin() ; T1 != L1.end(); T1++ )
cout<<" " <<*T1
<<" " ;
if
(L2.empty())
cout<<"\nL2 sekarang
kosong."<<endl;
}
|
KELUARAN
|
|
List-list diberikan
sebagai berikut:
List1
List2
1
1
2
4
3
9
4
16
Lis list1 yang
baru:
1
1 2 3
4 4 9 16
L2 sekarang
kosong.
|
13.9 Fungsi-Fungsi
dan Operator-Operator yang Didukung oleh Kelas deque
Sejumlah fungsi yang umum digunakan yang didukung oleh kelas deque dicantumkan pada Tabel 13.5.
Fungsi-fungsi lain yang didukung oleh kelas deque, yang juga didukung oleh kelas vector adalah fungsi push_front()
dan pop_front(). Fungsi capacity() dan reserve() bukan fungsi anggota dari kelas deque.
TABEL 13.4 Fungsi-fungsi anggota yang didukung oleh kelas deque.
assign()
|
back()
|
begin()
|
clear()
|
at()
|
empty()
|
end()
|
erase()
|
front()
|
insert()
|
pop_front()
|
max_size()
|
pop_back()
|
push_back()
|
push_front()
|
rbegin()
|
rend()
|
resize()
|
size()
|
swap()
|
Kelas deque mendukung
operator-operator relasional. Sebuah deque dapat ditugaskan dengan operator =
dan dibandingkan dengan deque lain dengan operator >, <, >=, <=,
dan lainnya.
Program 13.14 Mengilustrasikan
iterator, push_back(), push_front() pada deque
|
|
|
#include<iostream>
#include<deque>
using namespace std;
deque<int> Q1, Q3;
deque<char> Q2;
int main()
{
for
(int i =0; i<4;i++)
{
Q1.push_back (i*i);
Q2.push_back (65 +i);
}
Q3 = Q1; //Q1 ditugaskan kepada Q3
Q3.push_front(20);
Q3.push_back(20*20);
for
(int j = 0; j<4; j++)
cout
<<Q1[j]<<"\t"<<Q2[j] <<endl;
cout<<"\nUkuran dari Q3 =
"<<Q3.size()<<endl;
cout <<"Elemen-elemen dari Q3
adalah: ";
deque<int>:: iterator iter;
for
(iter = Q3.begin(); iter < Q3.end(); iter++)
cout<< *iter <<"
";
return
0;
}
|
KELUARAN
|
|
0 A
1 B
4 C
9 D
Ukuran dari Q3
= 6
Elemen-elemen
dari Q3 adalah: 20 0 1 4 9 400
|
13.10 Aplikasi
dari Fungsi-Fungsi yang Didukung oleh Kelas deque
Program 13.15 Mengilustrasikan iterator, push_back(),
pop_front(), pop_back, dan size() untuk deque
|
|
|
#include<iostream>
#include <deque>
using namespace std;
int main()
{
deque <double> Q1;
for
(int i =0; i< 7;i++)
Q1.push_back (1.5*i);
cout<<"Elemen-elemen queue
adalah: "<<endl;
for
(int j = 0; j<6; j++)
cout <<" "<<
Q1[j]<<" " ;
cout<<endl;
cout <<"Ukuran dari Q1 adalah:
" <<Q1.size()<<endl;
Q1.pop_back();
Q1.pop_front();
cout<<"Sekarang ukuran dari Q1
adalah: "<<Q1.size()<<endl;
deque <double> :: iterator itr; // itr adalah nama dari iterator
Q1.insert((Q1.begin() +2),2,50.5); ;
//menyisipkan 2 elemen dengan nilai 50.5.
cout<<"Elemen-elemen dari Q1
adalah: "<<endl;
for
(itr = Q1.begin(); itr < Q1.end() ; itr ++)
cout<<*itr <<" "
;
cout<<endl;
return
0;
}
|
KELUARAN
|
|
Elemen-elemen
queue adalah:
0
1.5 3 4.5
6 7.5
Ukuran dari Q1
adalah: 7
Sekarang ukuran
dari Q1 adalah: 5
Elemen-elemen
dari Q1 adalah:
1.5 3 50.5 50.5
4.5 6 7.5
|
Karena deque adalah antrian dengan dua ujung (double ended queue), elemen-elemen dapat ditambahkan di ujung depan
maupun di ujung belakang dari antrian. Program berikut mengilustrasikannya.
Program 13.16 Mengilustrasikan aplikasi dari fungsi
erase(), push_front(), push_back(), dan insert()
|
|
|
#include<iostream>
#include <deque>
using namespace std;
int main()
{
deque <int> Q1;
Q1.assign(4, 12) ;
cout<<"Elemen-elemen dari
antrian adalah: "<<endl;
for
(int j = 0; j<4; j++)
cout <<" "<<
Q1[j]<<" " ;
cout<<endl;
cout<<"Ukuran dari Q1 adalah:
" << Q1.size()<<endl;
cout<<"Menempatkan dua (nilai
10) di depan dan dua (nilai 20) di akhir antrian."<<endl;
Q1.push_front(10 );
Q1.push_front(10 );
Q1.push_back(20);
Q1.push_back(20);
deque<int> :: iterator itr ;
// itr adalah nama iterator
for
(itr= Q1.begin(); itr != Q1.end(); itr++)
cout << *(itr ) <<"
" ;
cout <<"\nElemen-elemen ke-2
sampai ke-4 dihapus."<<endl;
Q1.erase((Q1.begin() +1),(Q1.begin() +4 )
);
cout<<"Menyisipkan dua nilai 50
pada posisi ke-3."<<endl;
Q1.insert((Q1.begin() +2),2,50 );
cout<<"Sekarang ukuran dari Q1
adalah: "<<Q1.size()<<endl;
cout<<"Elemen-elemen dari Q1
adalah: "<<endl;
for
(itr = Q1.begin() ; itr < Q1.end () ; itr ++)
cout<<*itr <<" "
;
cout<<endl;
return
0;
}
|
KELUARAN
|
|
Elemen-elemen
dari antrian adalah:
12
12 12 12
Ukuran dari Q1
adalah: 4
Menempatkan dua
(nilai 10) di depan dan dua (nilai 20) di akhir antrian.
10 10 12 12 12
12 20 20
Elemen-elemen
ke-2 sampai ke-4 dihapus.
Menyisipkan dua
nilai 50 pada posisi ke-3.
Sekarang ukuran
dari Q1 adalah: 7
Elemen-elemen
dari Q1 adalah:
10 12 50 50 12
20 20
|
LATIHAN
1.
Apakah itu kontainer runtun?
2.
Apakah kesamaan dan perbedaan antara
vektor dan list?
3.
Sebuah vektor harus memiliki 5 elemen.
Setiap elemen memiliki nilai 35. Bagaimana Anda mengkonstruksi vektor itu?
4.
Sebuah list harus memiliki 5 nama
sebagai elemen-elemennya. Bagaimana Anda mendeklarasikan dan menginisialisasi
list?
5.
Apa perbedaan utama antara list dan
deque?
6.
Apa perbedaan antara fungsi capacity() dan fungsi size()?
7.
Apakah argumen-argumen dari fungsi erase() dari kelas vector?
8.
Fungsi-fungsi apakah yang didukung oleh
list tetapi tidak didukung oleh vektor?
9.
Apa itu iterator?
10.
Bagaimana Anda mendeklarasikan sebuah
iterator untuk vektor dengan elemen-elemen int?
11.
Apa yang Anda pahami tentang fungsi begin() dan end()?
12.
Apa perbedaan antara fungsi back() dan end()?
13.
Apa perbedaan
antara fungsi begin() dan rbegin()?
14.
Apa perbedaan
antara fungsi begin() dan front() ketika diterapkan pada list?
15.
Berikan contoh
kode untuk mengilustrasikan fungsi remove()
dan remove_if().
16.
Apa yang Anda
pahami tentang fungsi max_size()
ketika diterapkan pada deque?
17.
Tulislah sebuah
program untuk mengilustrasikan fungsi sort()
untuk mengurutkan sebuah list dengan 10 karakter yang dimasukkan oleh user.
18.
Tulislah sebuah
program untuk deque yang mengilustrasikan fungsi size(), resize(), dan insert().
19.
Tulislah sebuah
program untuk vektor yang mengilustrasikan sejumlah konstruktor.
20.
Tulislah sebuah
program dimana di dalamnya dua vektor yang berukuran sama dikonstruksi dan
ditukar dan ditampilkan pada layar.
21.
Tulislah sebuah
program untuk list yang mengilustrasikan aplikasi dari fungsi insert().
22.
Buatlah sebuah
list dengan karakter-karakter dengan tatanan menurun dari Z sampai A dan
urutkan dengan tatanan menaik dari A sampai Z dan tampilkan isinya.
Jawaban:
Program 13.17 Mengurutkan list yang
memuat karakter A sampai Z
|
|
|
#include<iostream>
#include<list>
using namespace std;
list <char> L1; // declaration of list
void main()
{
for
(int i=0; i<26;i++)
L1.push_back(90 - i ); //konstruksi
list
list<char>::iterator T;
cout<<"List awal adalah:
"<<endl;
for
(T = L1.begin(); T!=L1.end(); T++)
cout <<" " <<*T ;
//statemen keluaran
cout<<"\n\n";
L1.sort() ; //untuk mengurutkan
{
list<char> ::iterator IT;
cout<<"List terurut adalah:
"<<endl;
for ( IT = L1.begin(); IT!=L1.end();
IT++)
cout<<" "
<<*IT ; //statemen keluaran setelah pengurutan
}
cout<<endl;
}
|
KELUARAN
|
|
List awal
adalah:
Z Y X W V U T S R Q P O N M L K J I H G F E
D C B A
List terurut
adalah:
A B C D E F G H I J K L M N O P Q R S T U V
W X Y Z
|
23.
Tulislah sebuah program yang
mengilustrasikan aplikasi dari fungsi at()
dan yang menampilkan bahwa fungsi itu lebih baik daripada dengan menggunakan
operator indeks [].