From 32b1e69f556ef6ebb05b32e8c2e37124f220f9ec Mon Sep 17 00:00:00 2001 From: Leon Wilzer Date: Sat, 17 Dec 2022 21:35:56 +0100 Subject: [PATCH] idk --- Makefile | 6 +++ src/sheet06.cpp | 5 +- src/sheet07.cpp | 139 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 148 insertions(+), 2 deletions(-) create mode 100644 src/sheet07.cpp diff --git a/Makefile b/Makefile index bf71fca..e902411 100755 --- a/Makefile +++ b/Makefile @@ -1,4 +1,5 @@ CC := clang++ -Wall -std=c++17 -Wall -Wextra -g -fsanitize=address,undefined -fno-omit-frame-pointer +#CC := clang++ -Wall -std=c++17 -Wall -Wextra setup: mkdir build @@ -39,6 +40,11 @@ sheet06: chmod +x build/sheet06 build/sheet06 +sheet07: + $(CC) src/sheet07.cpp -o build/sheet07 + chmod +x build/sheet07 + build/sheet07 + pizza: $(CC) src/pizza.cpp -o build/pizza chmod +x build/pizza diff --git a/src/sheet06.cpp b/src/sheet06.cpp index ee4ee5c..16e30c5 100644 --- a/src/sheet06.cpp +++ b/src/sheet06.cpp @@ -55,9 +55,10 @@ void bubble_sort(std::vector &v, std::function predicate) }while(has_swapped); } -char add() +template +A add(A a) { - return 0; + return a; } template diff --git a/src/sheet07.cpp b/src/sheet07.cpp new file mode 100644 index 0000000..82db29c --- /dev/null +++ b/src/sheet07.cpp @@ -0,0 +1,139 @@ +#include +#include +#include +#include +#include +#include +#include + +template +class matrix +{ + public: + matrix(size_t rows, size_t columns) : rows(rows), columns(columns) + { + data(); + } + matrix(size_t rows, size_t columns, const T &ival) : rows(rows), columns(columns) + { + data = std::vector(rows*columns, ival); + } + matrix(std::initializer_list> imat) + { + size_t prev_length; + for(std::initializer_list row : imat) + { + if(prev_length!=row.size()) + { + throw std::domain_error("provided initializer list with empty spots."); + } + + prev_length = row.size(); + + for(T t : row) + { + data.push_back(t); + } + } + } + T& operator() (size_t row, size_t column) + { + if(row>=this->num_rows()) + { + throw std::length_error("row outside matrix."); + } + if(column>=this->num_columns()) + { + throw std::length_error("column outside matrix."); + } + + return data.at(row*(this->num_columns())+column); + } + const T& operator() (size_t row, size_t column) const + { + if(row>=this->num_rows()) + { + throw std::length_error("row outside matrix."); + } + if(column>=this->num_columns()) + { + throw std::length_error("column outside matrix."); + } + + return data.at(row*(this->num_columns())+column); + } + + size_t num_elements() const noexcept { return columns*rows; } + size_t num_rows() const noexcept { return rows; } + size_t num_columns() const noexcept { return columns; } + + friend matrix operator* (const matrix &lhs, const T &scale) + { + matrix out(lhs.num_rows(), lhs.num_columns(), 0); + for(size_t x=0; x data; +}; + +int main() +{ + matrix m(5,5,5); + std::cout << m; + std::cout << m*5; + std::cout << m*m; +} \ No newline at end of file