- Object array
- vector
- deque
- List
- queue
- priority_queue
- stack
- set
- multiset
- map
- multimap
- unordered_set (mulai ada dalam C++11)
- unordered_multiset (mulai ada dalam C++11)
- unordered_map (mulai ada dalam C++11)
- unordered_multimap (mulai ada dalam C++11)
- forward_list(mulai ada dalam C++11)
Setiap container memiliki method-method khusus yang akan berbeda sesuai jenis containernya. Header yang mendeklarasikan container tersebut perlu disertakan di awal program. Kalian bisa melihat contoh penggunaan STL di bawah ini.
#include <iostream>
using namespace std;
#include <array>
#include <stack>
#include <queue>
#include <deque>
#include <vector>
#include <map>
#include <set>
#include <list>
#include <forward_list>
#include <unordered_map>
#include <unordered_set>
int main(){
//deklarasi container
array<int, 10> arr;
stack<int> tumpukan;
queue<int> antrian;
deque<int> dq;
vector<int> vektor;
map<string, int> mapku1;
multimap<string, int> mapku2;
set<int> himpunan1;
multiset<int> himpunan2;
unordered_set<int> himpunan3;
list<int> daftar1;
forward_list<int> daftar2;
//tambah data
arr[0]=1;
tumpukan.push(2);
antrian.push(3);
dq.push_front(4);
vektor.push_back(5);
mapku1.insert(pair<string, int>("enam", 6));
mapku2.insert(pair<string, int>("tujuh", 7));
daftar1.push_front(8);
daftar2.push_front(9);
himpunan1.insert(10);
himpunan2.insert(11);
himpunan3.insert(12);
//Tampilkan satu data
cout << arr[0] << endl;
cout << tumpukan.top() << endl;
cout << antrian.front() << endl;
cout << dq.at(0) << endl;
cout << vektor.at(0) << endl;
cout << mapku1.at("enam") << endl;
auto p=mapku2.find("tujuh");cout << p->second << endl;
//Hapus data
tumpukan.pop();
antrian.pop();
dq.pop_front();
vektor.pop_back();
mapku1.erase("enam");
mapku2.erase("tujuh");
daftar1.pop_front();
daftar2.pop_front();
himpunan1.erase(10);
himpunan2.erase(11);
himpunan3.erase(12);
}
1 2 3 4 5 6 7
Selain arrray, semua container STL memiliki penyimpanan dinamis. Kalian bisa menambah dan menghapus isinya. Beberapa container hanya bisa ditambah dan dihapus isinya mulai dari ujung.
Iterator
Untuk mendapatkan data pada posisi tertentu berdasarkan indeksnya kalian umumnya bisa menggunakan method at() atau operator []. Tapi, tidak semua container STL bisa diakses berdasarkan indeksnya. Contoh container yang harus diakses semua datanya saat ditampilkan misalnya set, unordered_set, dan multiset.
Kalian bisa menggunakan method back untuk melihat isi terakhir container selain set, unordered_set, & multiset. Method front bisa digunakan untuk melihat isi pertama container selain set, unordered_set, multi_set, dan stack.
Kalian bisa menggunakan iterator khusus sesuai tipe container. Variabel iterator bisa dideklarasikan seperti saat deklarasi variabel container dengan menambahkan ::iterator. Misalnya, jika kalian menggunakan "vector<tipe_data> nama_variabel;", maka deklarasi iteratornya adalah "vector<tipe_data>::iterator nama_variabel;".
Iterator digunakan di dalam loop, terutama for, seperti saat menggunakan pointer. Pointer awal dari iterator didapat dengan method begin. Sebaliknya, pointer akhir bisa didapatkan dengan method end. Untuk menggeser pointer iterator, kalian bisa menggunakan operator increment(++);
Untuk urutan terbalik, kalian bisa menggunakan method rbegin, rend, dan ::iterator. Tapi, tidak semua container STL memiliki reverse iterator.
#include <iostream>
#include <set>
using namespace std;
int main(){
//deklarasi container
set<string> dataku={"saya", "kamu", "dia"};
set<string>::iterator it;
set<string>::reverse_iterator iti;
cout << "urutan normal : ";
for(it=dataku.begin();it!=dataku.end();it++)cout << *it << " ";
cout << endl << "urutan terbalik : ";
for(iti=dataku.rbegin();iti!=dataku.rend();iti++)cout << *iti << " ";
}
urutan normal : dia kamu saya urutan terbalik : saya kamu dia
Jika kalian tidak mau repot, kalian bisa menggunakan auto untuk mengganti tipe data iteratornya.
Swap
#include <iostream>
#include <array>
int main(){
std::array<int, 5> a1={1, 2, 3, 4, 5};
std::array<int, 5> a2={6, 7, 8, 9, 10};
std::cout << std::endl << "a1 : ";
for(auto iti=a1.rbegin();iti!=a1.rend();iti++)std::cout << *iti << " ";
std::cout << std::endl << "a2 : ";
for(auto iti=a2.rbegin();iti!=a2.rend();iti++)std::cout << *iti << " ";
std::cout << std::endl << "Tukar ...." << std::endl;
std::swap(a1, a2);
std::cout << std::endl << "a1 : ";
for(auto iti=a1.rbegin();iti!=a1.rend();iti++)std::cout << *iti << " ";
std::cout << std::endl << "a2 : ";
for(auto iti=a2.rbegin();iti!=a2.rend();iti++)std::cout << *iti << " ";
}
a1 : 5 4 3 2 1 a2 : 10 9 8 7 6 Tukar .... a1 : 10 9 8 7 6 a2 : 5 4 3 2 1