Met de volgende template beschrijf ik een
eenvoudige rij die altijd gesorteerd is van
klein naar groot:
Deze code werkt goed als ik in mijn testprogrammatje
alleen ints verwerk. Maak ik een rij om strings toe
te voegen dan crasht mijn programma.
Ik vermoed dat de fout hier zit:
Dit stukje code is onderdeel van de methode voegToe(K element).
Ik weet dat je strings net zo goed kan vergelijken met <, > en =
(zoals ints dus), maar ook dat er een methode compareTo() bestaat
in de klasse string. Als ik deze compareTo() zou gebruiken dan
zal mijn template niet meer werken met eender welk datatype.
Ook heb ik geprobeerd om te kijken naar de teller, en als deze teller
op 0 stond dat ik dan gewoon het element op index 0 zet in de rij.
Zo had ik altijd iets om mee te vergelijken dan dacht ik, maar mijn
programma blijft crashen.
Volgens mij zit het probleem dus gewoon in het feit dat ik geen lege
array kan vergelijken met een string maar wel met een int.
Zie ik dit fout? En hoe los ik dit probleempje op?
eenvoudige rij die altijd gesorteerd is van
klein naar groot:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
| #include <string>
template <class K>
class mijnVector {
public:
mijnVector();
void voegToe(K element);
void printRij();
void verdubbelRij();
void verschuifRij(int i, int t);
private:
int teller;
int grootte;
int index;
K rij[10];
};
template <class K>
mijnVector<K>:: mijnVector() {
teller = 0;
grootte = 10;
index = 0;
}
template <class K>
void mijnVector<K>:: voegToe(K element) {
//kijken waar het element moet komen
while(element > rij[index]) {
index++;
}
//kijken of er plaats genoeg is
if (index > grootte) {
grootte = grootte * 2;
teller++;
verdubbelRij();
rij[index] = element;
}
else {
//kijken of we moeten verschuiven
teller++;
if (index < teller) {
verschuifRij(index,teller);
rij[index] = element;
}
}
}
template <class K>
void mijnVector<K>:: printRij() {
for (int i = 0; i < teller; i++) {
cout << rij[i] << "\n";
}
}
template <class K>
void mijnVector<K>:: verdubbelRij() {
K kopie[grootte];
for (int i = 0; i < teller; i++) {
kopie[i] = rij[i];
}
K rij[grootte];
for (int i = 0; i < teller; i++) {
rij[i] = kopie[i];
}
}
template <class K>
void mijnVector<K>:: verschuifRij(int i, int t) {
//kijken of er nog plaats is om te verschuiven
if (t >= grootte) {
verdubbelRij();
}
for(int j = grootte; j > i; j--) {
rij[j] = rij[j-1];
}
} |
Deze code werkt goed als ik in mijn testprogrammatje
alleen ints verwerk. Maak ik een rij om strings toe
te voegen dan crasht mijn programma.
Ik vermoed dat de fout hier zit:
code:
1
2
3
4
| //kijken waar het element moet komen
while(element > rij[index]) {
index++;
} |
Dit stukje code is onderdeel van de methode voegToe(K element).
Ik weet dat je strings net zo goed kan vergelijken met <, > en =
(zoals ints dus), maar ook dat er een methode compareTo() bestaat
in de klasse string. Als ik deze compareTo() zou gebruiken dan
zal mijn template niet meer werken met eender welk datatype.
Ook heb ik geprobeerd om te kijken naar de teller, en als deze teller
op 0 stond dat ik dan gewoon het element op index 0 zet in de rij.
Zo had ik altijd iets om mee te vergelijken dan dacht ik, maar mijn
programma blijft crashen.
Volgens mij zit het probleem dus gewoon in het feit dat ik geen lege
array kan vergelijken met een string maar wel met een int.
Zie ik dit fout? En hoe los ik dit probleempje op?
Clowns to the left of me, Jokers to the right