diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4aad8cf..ae2812e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -16,3 +16,4 @@ add_executable(HeapMemory HeapMemory.cc) add_executable(AbstractClasses AbstractClasses.cc) add_executable(vector vector.cc) add_executable(Vector2 Vector2.cc) +add_executable(TemplateVector TemplateVector.cc) diff --git a/src/TemplateVector.cc b/src/TemplateVector.cc new file mode 100644 index 0000000..e87e353 --- /dev/null +++ b/src/TemplateVector.cc @@ -0,0 +1,71 @@ +#include +#include +#include +#include +template +class Vector { +private: + T* elem; + int sz; + +public: + explicit Vector(int size) + { + elem = new T[size]; + sz = size; + } + ~Vector() + { + delete[] elem; + } + + T& operator[](int i) + { + if (i < 0 || size() <= i) { + #if __cpp_exceptions == 199711 + throw std::out_of_range { "Vector::operator[]" }; + #else + std::exit(1); + #endif + } + + return elem[i]; + } + + T* begin() + { + return &elem[0]; + } + + T* end() + { + return &elem[0] + size(); + } + + constexpr int size() const + { + return sz; + } +}; + +int main() +{ + Vector doubles(5); + Vector strings(5); + + for (int i = 0; i < doubles.size(); i++) { + doubles[i] = i + 1; + } + + for (int i = 0; i < strings.size(); i++) { + strings[i] = std::format("this is element {}", i); + } + + for (double i : doubles) { + std::cout << i << std::endl; + } + + for (std::string i : strings) { + std::cout << i << std::endl; + } +}