Finish ArrayDeque.
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
#include <cassert>
|
||||
#include <iostream>
|
||||
#include <ods/array.h>
|
||||
#include <ods/array_stack.h>
|
||||
@@ -51,16 +52,30 @@ main(void)
|
||||
cout << "=== ArrayDeque ===" << endl;
|
||||
ArrayDeque<int> ad(1);
|
||||
for (int i = 0; i < 5; i++) {
|
||||
ad.add(0, i);
|
||||
ad.add(0, 4-i);
|
||||
}
|
||||
cout << "size: " << ad.size() << ", cap: " << ad.cap() << endl;
|
||||
|
||||
for (int i = 0; i < 5; i++) {
|
||||
ad.add(ad.size() - 1, i);
|
||||
ad.add(ad.size(), i);
|
||||
}
|
||||
cout << "size: " << ad.size() << ", cap: " << ad.cap() << endl;
|
||||
|
||||
for (int i = 0; i < ad.size(); i++) {
|
||||
cout << i << "\t" << ad.get(i) << endl;
|
||||
}
|
||||
|
||||
auto x = ad.remove(1);
|
||||
assert(x == 1);
|
||||
x = ad.remove(7);
|
||||
assert(x == 3);
|
||||
cout << "size: " << ad.size() << ", cap: " << ad.cap() << endl;
|
||||
|
||||
for (int i = 0; i < ad.size(); i++) {
|
||||
cout << i << "\t" << ad.get(i) << endl;
|
||||
}
|
||||
ad.remove(2);
|
||||
ad.remove(3);
|
||||
ad.remove(4);
|
||||
cout << "size: " << ad.size() << ", cap: " << ad.cap() << endl;
|
||||
}
|
||||
|
||||
@@ -55,6 +55,28 @@ public:
|
||||
n++;
|
||||
}
|
||||
|
||||
T remove(int i) {
|
||||
T x = a[index(i)];
|
||||
if (i < (n/2)) {
|
||||
for (int k = i; k > 0; k--) {
|
||||
a[index(k)] = a[index(k-1)];
|
||||
}
|
||||
j = index(1);
|
||||
}
|
||||
else {
|
||||
for (int k = i; k < n-1; k++) {
|
||||
a[index(k)] = a[index(k+1)];
|
||||
}
|
||||
}
|
||||
n--;
|
||||
|
||||
if (a.length > 3 * n) {
|
||||
resize();
|
||||
}
|
||||
|
||||
return x;
|
||||
}
|
||||
|
||||
void resize(void) {
|
||||
Array<T> b(max(2 * n, 1));
|
||||
for (int k = 0; k < n; k++) {
|
||||
|
||||
Reference in New Issue
Block a user