Commit 702f90c78935a47ce646f3d12b02bac9cd100552
1 parent
27cf1cf7
Added example of list with iterator
Showing
23 changed files
with
76 additions
and
0 deletions
examples09/03-list/list.cpp
0 → 100644
1 | +#include <iostream> | |
2 | +#include <stddef.h> | |
3 | + | |
4 | +class List { | |
5 | + struct BaseNode { | |
6 | + BaseNode *prev; | |
7 | + BaseNode *next; | |
8 | + }; | |
9 | + | |
10 | + struct Node : public BaseNode { | |
11 | + int data; | |
12 | + }; | |
13 | + | |
14 | + BaseNode FirstLast {.prev = &FirstLast, .next = &FirstLast}; | |
15 | + | |
16 | +public: | |
17 | + | |
18 | +// List() { | |
19 | +// FirstLast.next = &FirstLast; | |
20 | +// FirstLast.prev = &FirstLast; | |
21 | +// }; | |
22 | + | |
23 | + ~List() { | |
24 | + BaseNode *ptr = FirstLast.next; | |
25 | + while (ptr != &FirstLast) { | |
26 | + BaseNode *next = ptr->next; | |
27 | + delete ptr; | |
28 | + ptr = next; | |
29 | + } | |
30 | + } | |
31 | + | |
32 | + class Iterator { | |
33 | + BaseNode *ptr; | |
34 | + | |
35 | + public: | |
36 | + Iterator(BaseNode *p) : ptr(p){}; | |
37 | + | |
38 | + int &operator*() { return static_cast<Node *>(ptr)->data; } | |
39 | + Iterator &operator++() { | |
40 | + ptr = ptr->next; | |
41 | + return *this; | |
42 | + } | |
43 | + bool operator!=(const Iterator &o) { return ptr != o.ptr; } | |
44 | + friend class List; | |
45 | + }; | |
46 | + | |
47 | + void insert(Iterator i, int v) { | |
48 | + Node *n = new Node; | |
49 | + n->prev = i.ptr->prev; | |
50 | + n->next = i.ptr; | |
51 | + i.ptr->prev->next = n; | |
52 | + i.ptr->prev = n; | |
53 | + n->data = v; | |
54 | + } | |
55 | + | |
56 | + Iterator begin() { return Iterator(FirstLast.next); }; | |
57 | + Iterator end() { return Iterator(&FirstLast); }; | |
58 | +}; | |
59 | + | |
60 | +int main() { | |
61 | + List c; | |
62 | + c.insert(c.begin(), 1); | |
63 | + c.insert(c.begin(), 2); | |
64 | + c.insert(c.begin(), 3); | |
65 | + | |
66 | + for (auto i : c) | |
67 | + std::cout << i << std::endl; | |
68 | +} | ... | ... |
examples09/03-list/makefile
0 → 100644
examples09/03-algorithm/algo1.cpp renamed to examples09/04-algorithm/algo1.cpp
examples09/03-algorithm/algo2.cpp renamed to examples09/04-algorithm/algo2.cpp
examples09/03-algorithm/makefile renamed to examples09/04-algorithm/makefile
examples09/04-functionobject/fun1.cpp renamed to examples09/05-functionobject/fun1.cpp
examples09/04-functionobject/fun2.cpp renamed to examples09/05-functionobject/fun2.cpp
examples09/04-functionobject/fun3.cpp renamed to examples09/05-functionobject/fun3.cpp
examples09/04-functionobject/makefile renamed to examples09/05-functionobject/makefile
examples09/05-unordered_set/employee.h renamed to examples09/06-unordered_set/employee.h
examples09/05-unordered_set/makefile renamed to examples09/06-unordered_set/makefile
examples09/05-unordered_set/unordered_set.cpp renamed to examples09/06-unordered_set/unordered_set.cpp
examples09/05-unordered_set/unordered_set2.cpp renamed to examples09/06-unordered_set/unordered_set2.cpp
examples09/06-closures/fun1.cpp renamed to examples09/07-closures/fun1.cpp
examples09/06-closures/fun2.cpp renamed to examples09/07-closures/fun2.cpp
examples09/06-closures/fun3.cpp renamed to examples09/07-closures/fun3.cpp
examples09/06-closures/fun4.cpp renamed to examples09/07-closures/fun4.cpp
examples09/06-closures/fun5.cpp renamed to examples09/07-closures/fun5.cpp
examples09/06-closures/makefile renamed to examples09/07-closures/makefile
examples09/07-fifo/fifo1_bad.cpp renamed to examples09/08-fifo/fifo1_bad.cpp
examples09/07-fifo/fifo2.cpp renamed to examples09/08-fifo/fifo2.cpp
examples09/07-fifo/fifo3.cpp renamed to examples09/08-fifo/fifo3.cpp
examples09/07-fifo/makefile renamed to examples09/08-fifo/makefile