У меня есть собственный класс Vector, который я хочу использовать для динамических c массивов объектов. Я думаю, что у меня есть логика c, стоящая за ним, несколько правильная, так как этот код предназначен для обработки числовых значений любого типа, но как я смогу создавать массивы объектов? Я также перегружаю оператор [], чтобы увеличить размер массива на * 2, если индекс выходит за пределы. Было бы полезно получить некоторые отзывы о том, как я могу передать массивы объектов, а также обо всем, что мне, возможно, понадобится изменить. 1009 *, который считывает объекты, использующие этот шаблон, и каким будет тип параметра для моей функции?
Vector.h:
#ifndef VECTOR_H
#define VECTOR_H
#include <iostream>
#include <sstream>
#include <string>
template<class T>
class Vector {
public:
Vector();
T& operator[](int index);
void addData(int val);
int size();
private:
T* data;
int arraysize;
int nextIndex;
};
Vector<T> Vector() {
data = new T[10];
for(int x = 0; x < 10; x++) data[x] = 0;
arraysize = 0;
nextIndex = 0;
}
T& Vector<T> operator[](int index) {
T* newData;
if(index >= arraysize) {
newData = new T[index * 2];
for(int x = 0; x < nextIndex; x++) newData[x] = data[x];
for(int j = nextIndex; j < index * 2; j++) newData[j] = 0;
arraysize = index * 2;
delete[] data;
data = newData;
}
if(index > nextIndex) nextIndex = index + 1;
return *(data + index);
}
void add(T val) {
T* newArray;
if(nextIndex == arraysize) {
arraysize = arraysize * 2;
newArray = new T[arraysize];
for(int x = 0; x < nextIndex; x++) {
newArray[x] = data[x];
for(int y = nextIndex; y < arraysize; y++) newArray[y] = 0;
delete[] data;
data = newArray;
}
data[nextIndex++] = val;
}
}
int size() {
return arraysize;
}
void printArray() {
std::ostringstream oss;
for(int i = 0; i < this->arraysize; ++i) {
oss << this->data[i] + " ";
}
}
T* getData() {
return this->data;
}
void setData(T data, int index) {
this->getData()[index] = data;
}
#endif // VECTOR_H