Skip to content

Commit 5b9a039

Browse files
committed
feat: add initializer const add method insert afte
1 parent 3ce858b commit 5b9a039

File tree

3 files changed

+76
-13
lines changed

3 files changed

+76
-13
lines changed

compile.sh

100644100755
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
#!/bin/zsh
2+
set -e
3+
compile_head(){
4+
echo "Sedang mengkompilasi header..."
5+
# Asumsi Anda berada di direktori utama, pindah ke 'header'
6+
cd header
7+
clang++ -c forward_list.hpp -o ../bin/header.o
8+
# Kembali ke direktori utama
9+
cd ..
10+
}
11+
compile_imp(){
12+
echo "direktori saat ini $pwd"
13+
echo "Sedang mengkompilasi implementasi..."
14+
# Asumsi Anda berada di direktori utama, pindah ke 'implementation'
15+
cd implementation
16+
clang++ -c implementation.cpp -o ../bin/imp.o
17+
# Kembali ke direktori utama
18+
cd ..
19+
}
20+
21+
linking(){
22+
echo "Sedang melakukan proses linking..."
23+
# Gunakan path yang benar ke file objek
24+
clang++ ./bin/header.o ./bin/imp.o -o ./bin/res
25+
}
26+
27+
jalankan(){
28+
echo "Menyelesaikan semua kompilasi."
29+
echo "Direktori saat ini: "
30+
pwd
31+
echo "Menjalankan program..."
32+
clear
33+
# Panggil file executable yang berada di direktori 'bin'
34+
./bin/res
35+
}
36+
run(){
37+
# Buat direktori 'bin' jika belum ada
38+
if [ ! -d "bin" ]; then
39+
mkdir bin
40+
fi
41+
compile_head
42+
compile_imp
43+
linking
44+
jalankan
45+
}
46+
# Mulai eksekusi
47+
run

header/forward_list.hpp

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include <iostream>
2+
#include <initializer_list>
23
#ifndef __forwardList
34
#define __forwardList
45
template <typename T>
@@ -19,6 +20,20 @@ class forward_lists{
1920
this->head = nullptr;
2021
this->size = 0;
2122
}
23+
/**
24+
* @brief initializer list constructor
25+
* @details
26+
*/
27+
forward_lists(std::initializer_list<T> arr): head(nullptr){
28+
Node** curr = &head; //store alamat memory head ke curr
29+
for(const T& it: arr){
30+
*curr = new Node(it); //deference pointer
31+
//head = new Node(it) ->meaning
32+
curr = &((*curr)->next); //store alamat curr->next
33+
//curr = head->next
34+
//curr selalu menunjuk ke posisi kosong
35+
}
36+
}
2237
//copy constructor
2338
forward_lists(const forward_lists& others){
2439
if(*this == &others){
@@ -62,22 +77,22 @@ class forward_lists{
6277
private:
6378
Node* node;
6479
public:
65-
Iterator(Node n){
80+
Iterator(Node* n){
6681
this->node = n;
6782
}
68-
Iterator& operator*(){
83+
T& operator*(){
6984
return node->data;
7085
}
71-
T& operator++(){
86+
Iterator& operator++(){ //harus mengembalikan reference ke object saat ini
7287
if(node) node = node->next;
7388
return *this;
7489
}
75-
Iterator& operator++(int){
90+
Iterator operator++(int){ //harus mengambalikan salin bukan referensi
7691
Iterator temp = *this; //simpan keadaan sebelum di geser
7792
++(*this);//geser
7893
return temp; //kembalikan keadaan sebelum di geser
7994
}
80-
bool operator!=(const Iterator& others){
95+
bool operator!=(const Iterator& others)const{
8196
return node != others.node;
8297
}
8398
};
@@ -140,13 +155,14 @@ class forward_lists{
140155
curr->next = new_node;
141156
}else{
142157
Node* new_node = new Node(val);
143-
Node* temp = new_node;
144-
for(int i = 0;i < n;i++){
145-
Node* n_node = new Node(val);
146-
new_node->next = n_node;
158+
Node* tail = new_node;
159+
for(int i = 0;i < n - 1;i++){
160+
Node* baru = new Node(val);
161+
tail->next = baru;
162+
tail = baru;
147163
}
148-
new_node->next = curr->next;
149-
curr->next = temp;
164+
tail->next = curr->next;
165+
curr->next = new_node;
150166
}
151167
}
152168
public:

implementation/implementation.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ int main(){
55
fl.push_front(1);
66
fl.push_front(2);
77
fl.push_front(3);
8-
for(auto it = fl.begin();it != fl.end();++it){
9-
std ::cout << *it << " " << std::endl;
8+
for(auto it = fl.begin(); it != fl.end(); ++it) {
9+
std::cout << *it << " " << std::endl;
1010
}
1111
std::cin.get();
1212
return 0;

0 commit comments

Comments
 (0)