質問するログイン新規登録

質問編集履歴

2

コードの改善

2020/03/08 22:17

投稿

do_Shiro_to
do_Shiro_to

スコア15

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 (mData[mCurrentIndex] != nullptr)
76
+ if (mMyVector[mCurrentIndex] != nullptr)
78
77
  {
79
- return mData[mCurrentIndex];
78
+ return mMyVector[mCurrentIndex];
80
79
  }
81
80
  return sUndefined;
82
81
  }
83
82
  void Next()
84
83
  {
85
- mCurrentIndex = mCurrentIndex + 1;
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 (Size() != mCurrentIndex-1)
92
+ while (tSize != mCurrentIndex-1)
93
93
  {
94
- if (mData[mCurrentIndex] == rhs.GetData)
94
+ if (mMyVector[mCurrentIndex] == rhs.GetData)
95
95
  {
96
96
  tCount++;
97
97
  }
98
98
  mCurrentIndex++;
99
99
  }
100
100
 
101
-
102
- if (tCount == Size())
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) // These two use iterators now
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(mMyVector, tWhere);
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(mMyVector, tWhere+1);
162
+ Iterator tAnswer(mData, tRet);
161
163
  return tAnswer;
162
164
  }
163
165
  Iterator Begin()
164
166
  {
165
- Iterator tAnswer(mMyVector, 0);
167
+ Iterator tAnswer(mData, 0);
166
168
  return tAnswer;
167
169
  }
168
170
  Iterator End()
169
171
  {
170
- Iterator tAnswer(mMyVector, mSize-1);
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 = tWhat->mPrev;
280
+ ListNode* tPrev = tDead->mPrev;
275
- ListNode* tNext = tWhat->mNext;
281
+ tPre->mNext = tDead;
282
+ tNext->mPrev = tDead;
276
- delete tWhat;
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

脱字の修正

2020/03/08 22:17

投稿

do_Shiro_to
do_Shiro_to

スコア15

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;