#include <iostream>
#include <cstdlib>
#include <cstring>
class Vector {
private:
int* data;
int size;
int capacity;
public:
Vector(int initialCapacity = 10) : size(0), capacity(initialCapacity) {
data = (int*)std::malloc(capacity * sizeof(int));
}
~Vector() {
std::free(data);
}
void resize(int newSize) {
if (newSize > capacity) {
capacity = newSize * 2;
int* newData = (int*)std::malloc(capacity * sizeof(int));
std::memcpy(newData, data, size * sizeof(int));
std::free(data);
data = newData;
}
size = newSize;
}
int getSize() const {
return size;
}
int getCapacity() const {
return capacity;
}
void setElement(int index, int value) {
if (index >= 0 && index < size) {
data[index] = value;
} else {
std::cerr << "Index out of bounds!" << std::endl;
}
}
int getElement(int index) const {
if (index >= 0 && index < size) {
return data[index];
} else {
std::cerr << "Index out of bounds!" << std::endl;
return -1;
}
}
Vector* shallowClone() const {
Vector* clone = new Vector(capacity);
clone->size = size;
clone->capacity = capacity;
clone->data = data;
return clone;
}
Vector* deepClone() const {
Vector* clone = new Vector(capacity);
clone->size = size;
clone->capacity = capacity;
clone->data = (int*)std::malloc(capacity * sizeof(int));
std::memcpy(clone->data, data, size * sizeof(int));
return clone;
}
};
int main() {
Vector vec(5);
for (int i = 0; i < 5; ++i) {
vec.setElement(i, i * 10);
}
Vector* shallowClone = vec.shallowClone();
Vector* deepClone = vec.deepClone();
vec.setElement(2, 999);
std::cout << "Original vector: ";
for (int i = 0; i < vec.getSize(); ++i) {
std::cout << vec.getElement(i) << " ";
}
std::cout << std::endl;
std::cout << "Shallow clone: ";
for (int i = 0; i < shallowClone->getSize(); ++i) {
std::cout << shallowClone->getElement(i) << " ";
}
std::cout << std::endl;
std::cout << "Deep clone: ";
for (int i = 0; i < deepClone->getSize(); ++i) {
std::cout << deepClone->getElement(i) << " ";
}
std::cout << std::endl;
delete shallowClone;
delete deepClone;
return 0;
}