#include "pch.h"
#include <cstddef>
#include <iostream>
#include <stdexcept>
template <typename T>
class CustomVector {
private:
T* data;
size_t size;
size_t capacity;
public:
class Iterator {
private:
T* ptr;
public:
Iterator(T* p) : ptr(p) {}
T& operator*() { return *ptr; }
T* operator->() { return ptr; }
Iterator& operator++() { ++ptr; return *this; }
Iterator operator++(int) { Iterator tmp = *this; ++ptr; return tmp; }
bool operator==(const Iterator& other) const { return ptr == other.ptr; }
bool operator!=(const Iterator& other) const { return ptr != other.ptr; }
};
CustomVector() : data(nullptr), size(0), capacity(0) {}
~CustomVector() { delete[] data; }
void push_back(const T& value) {
if (size == capacity) {
size_t new_capacity = capacity == 0 ? 1 : capacity * 2;
T* new_data = new T[new_capacity];
for (size_t i = 0; i < size; ++i) {
new_data[i] = data[i];
}
delete[] data;
data = new_data;
capacity = new_capacity;
}
data[size++] = value;
}
T& operator[](size_t index) {
if (index >= size) throw std::out_of_range("Index out of range");
return data[index];
}
size_t get_size() const { return size; }
Iterator begin() { return Iterator(data); }
Iterator end() { return Iterator(data + size); }
};
int main() {
CustomVector<int> customVec;
customVec.push_back(1);
customVec.push_back(2);
customVec.push_back(3);
for (auto& c : customVec) {
std::cout << c << " ";
}
std::cout << std::endl;
getchar();
return 0;
}