質問編集履歴
2
コードの改善
title
CHANGED
File without changes
|
body
CHANGED
@@ -62,7 +62,7 @@
|
|
62
62
|
class Iterator
|
63
63
|
{
|
64
64
|
int mCurrentIndex = 0;
|
65
|
-
Vector<T> *mMyVector = nullptr;
|
65
|
+
Vector<T> *mMyVector = nullptr;
|
66
66
|
friend class Vector<T>;
|
67
67
|
|
68
68
|
Iterator(Vector<T> *tWho, int tLocation)
|
@@ -71,35 +71,34 @@
|
|
71
71
|
mCurrentIndex = tLocation;
|
72
72
|
}
|
73
73
|
public:
|
74
|
-
|
75
74
|
T& GetData()
|
76
75
|
{
|
77
|
-
if (
|
76
|
+
if (mMyVector[mCurrentIndex] != nullptr)
|
78
77
|
{
|
79
|
-
return
|
78
|
+
return mMyVector[mCurrentIndex];
|
80
79
|
}
|
81
80
|
return sUndefined;
|
82
81
|
}
|
83
82
|
void Next()
|
84
83
|
{
|
85
|
-
mCurrentIndex =
|
84
|
+
mCurrentIndex += 1;
|
86
85
|
}
|
87
86
|
bool IsEqual(const Iterator& rhs)
|
88
87
|
{
|
89
88
|
int tCount = 0;
|
90
89
|
mCurrentIndex = 0;
|
90
|
+
int tSize = mMyVector->Size();
|
91
91
|
|
92
|
-
while (
|
92
|
+
while (tSize != mCurrentIndex-1)
|
93
93
|
{
|
94
|
-
if (
|
94
|
+
if (mMyVector[mCurrentIndex] == rhs.GetData)
|
95
95
|
{
|
96
96
|
tCount++;
|
97
97
|
}
|
98
98
|
mCurrentIndex++;
|
99
99
|
}
|
100
100
|
|
101
|
-
|
102
|
-
if (tCount ==
|
101
|
+
if (tCount == tSize)
|
103
102
|
{
|
104
103
|
return true;
|
105
104
|
}
|
@@ -108,23 +107,24 @@
|
|
108
107
|
return false;
|
109
108
|
}
|
110
109
|
}
|
111
|
-
}
|
112
110
|
};
|
113
111
|
|
114
|
-
Iterator Insert(Iterator tWhere, const T& tWhat)
|
112
|
+
Iterator Insert(Iterator tWhere, const T& tWhat)
|
115
113
|
{
|
116
114
|
if (mSize == mCapacity)
|
117
115
|
Reserve(2 * mCapacity);
|
118
116
|
|
119
117
|
int tSize = 0;
|
118
|
+
int tRet = 0;
|
120
119
|
T* tData = new T[mCapacity];
|
121
120
|
|
122
121
|
for (int i = 0; i < mSize; i++)
|
123
122
|
{
|
124
|
-
if(i == tWhere)
|
123
|
+
if(mData[i] == tWhere)
|
125
124
|
{
|
126
125
|
tData[tSize] = tWhat;
|
127
126
|
tSize++;
|
127
|
+
tRet = i + 1;
|
128
128
|
}
|
129
129
|
tData[tSize] = mData[i];
|
130
130
|
++tSize;
|
@@ -134,40 +134,42 @@
|
|
134
134
|
mData = tData;
|
135
135
|
mSize = tSize;
|
136
136
|
|
137
|
-
|
138
|
-
Iterator tAnswer(
|
137
|
+
Iterator tAnswer(mData, tRet);
|
139
138
|
return tAnswer;
|
140
139
|
}
|
141
140
|
Iterator Erase(Iterator tWhere)
|
142
141
|
{
|
143
142
|
int tSize = 0;
|
143
|
+
int tRet = 0;
|
144
144
|
T* tData = new T[mCapacity];
|
145
145
|
|
146
146
|
for (int i = 0; i < mSize; i++)
|
147
147
|
{
|
148
|
-
if (i == tWhere)
|
148
|
+
if (mData[i] == tWhere)
|
149
149
|
{
|
150
150
|
++tSize;
|
151
151
|
tData[i] = mData[tSize];
|
152
|
+
tRet = i+1;
|
152
153
|
}
|
153
154
|
tData[i] = mData[tSize];
|
154
155
|
++tSize;
|
155
156
|
}
|
157
|
+
|
156
158
|
delete[] mData;
|
157
159
|
mData = tData;
|
158
160
|
mSize = i;
|
159
161
|
|
160
|
-
Iterator tAnswer(
|
162
|
+
Iterator tAnswer(mData, tRet);
|
161
163
|
return tAnswer;
|
162
164
|
}
|
163
165
|
Iterator Begin()
|
164
166
|
{
|
165
|
-
Iterator tAnswer(
|
167
|
+
Iterator tAnswer(mData, 0);
|
166
168
|
return tAnswer;
|
167
169
|
}
|
168
170
|
Iterator End()
|
169
171
|
{
|
170
|
-
Iterator tAnswer(
|
172
|
+
Iterator tAnswer(mData, mSize);
|
171
173
|
return tAnswer;
|
172
174
|
}
|
173
175
|
};
|
@@ -258,22 +260,27 @@
|
|
258
260
|
Iterator Insert(Iterator tWhere, const T& tWhat)
|
259
261
|
{
|
260
262
|
ListNode* tNew = new ListNode;
|
261
|
-
ListNode* tPrev = tWhere->mPrev;
|
262
|
-
ListNode* tNext = tWhere->mNext;
|
263
263
|
tNew->mData = tWhat;
|
264
|
+
|
265
|
+
ListNode* tPrev = tWhere;
|
266
|
+
ListNode* tNext = tPrev->mNext;
|
267
|
+
tNext->mPrev = tPrev;
|
264
268
|
|
265
269
|
tPrev->mNext = tNew;
|
266
270
|
tNew->mPrev = tPrev;
|
267
271
|
tNew->mNext = tNext;
|
268
272
|
tNext->mPrev = tNew;
|
269
273
|
|
270
|
-
return Iterator(tNew);
|
274
|
+
return Iterator(tNew->mNext);
|
271
275
|
}
|
272
276
|
Iterator Erase(Iterator tWhat)
|
273
277
|
{
|
278
|
+
ListNode* tDead = tWhat;
|
279
|
+
ListNode* tNext = tDead->mNext;
|
274
|
-
ListNode* tPrev =
|
280
|
+
ListNode* tPrev = tDead->mPrev;
|
275
|
-
|
281
|
+
tPre->mNext = tDead;
|
282
|
+
tNext->mPrev = tDead;
|
276
|
-
delete
|
283
|
+
delete tDead;
|
277
284
|
|
278
285
|
tPrev->mNext = tNext;
|
279
286
|
tNext->mPrev = tPrev;
|
@@ -292,6 +299,47 @@
|
|
292
299
|
};
|
293
300
|
```
|
294
301
|
|
302
|
+
VectorとListの関数を簡略しているので、このままコンパイルはできません。
|
303
|
+
こんな感じのmainで動かせればいいなと思います。
|
304
|
+
```C++
|
305
|
+
#include <iostream>
|
306
|
+
#include "List.h"
|
307
|
+
#include "Vector.h"
|
308
|
+
|
309
|
+
using namespace std;
|
310
|
+
|
311
|
+
int main()
|
312
|
+
{
|
313
|
+
Vector<int> tTester;
|
314
|
+
tTester.PushBack(0);
|
315
|
+
tTester.PushBack(1);
|
316
|
+
tTester.PushBack(2);
|
317
|
+
|
318
|
+
for (Vector<int>::Iterator iter = tTester.Begin(); !iter.IsEqual(tTester.End()); iter.Next())
|
319
|
+
{
|
320
|
+
cout << iter.GetData() << " ";
|
321
|
+
}
|
322
|
+
|
323
|
+
cout << endl;
|
324
|
+
tTester.Erase(tTester.Begin());
|
325
|
+
|
326
|
+
for (Vector<int>::Iterator iter = tTester.Begin(); !iter.IsEqual(tTester.End()); iter.Next())
|
327
|
+
{
|
328
|
+
cout << iter.GetData() << " ";
|
329
|
+
}
|
330
|
+
|
331
|
+
cout << endl;
|
332
|
+
tTester.Insert(tTester.Begin(), 999);
|
333
|
+
tTester.Insert(tTester.Begin(), 888);
|
334
|
+
|
335
|
+
for (Vector<int>::Iterator iter = tTester.Begin(); !iter.IsEqual(tTester.End()); iter.Next())
|
336
|
+
{
|
337
|
+
cout << iter.GetData() << " ";
|
338
|
+
}
|
339
|
+
}
|
340
|
+
```
|
341
|
+
|
342
|
+
|
295
343
|
### 補足情報(FW/ツールのバージョンなど)
|
296
344
|
|
297
345
|
Visual Studio 2019 ver.16.0.2.
|
1
脱字の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -153,6 +153,9 @@
|
|
153
153
|
tData[i] = mData[tSize];
|
154
154
|
++tSize;
|
155
155
|
}
|
156
|
+
delete[] mData;
|
157
|
+
mData = tData;
|
158
|
+
mSize = i;
|
156
159
|
|
157
160
|
Iterator tAnswer(mMyVector, tWhere+1);
|
158
161
|
return tAnswer;
|