From 95df0a032199bd36bfaf89ed7a3f03dabffef013 Mon Sep 17 00:00:00 2001 From: Fries Date: Fri, 23 Jun 2023 00:26:42 -0700 Subject: [PATCH] add a TemplateVector program this is a Vector using templates which means you can use any type with the Vector instead of just a double. --- src/CMakeLists.txt | 1 + src/TemplateVector.cc | 71 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 src/TemplateVector.cc 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; + } +}