diff --git a/CPlusPlus20ForProgrammers-master/examples/ch06/a.out b/CPlusPlus20ForProgrammers-master/examples/ch06/a.out index f625659..ed9afff 100755 Binary files a/CPlusPlus20ForProgrammers-master/examples/ch06/a.out and b/CPlusPlus20ForProgrammers-master/examples/ch06/a.out differ diff --git a/CPlusPlus20ForProgrammers-master/examples/ch06/matrix.cpp b/CPlusPlus20ForProgrammers-master/examples/ch06/matrix.cpp index a17ee65..23576aa 100644 --- a/CPlusPlus20ForProgrammers-master/examples/ch06/matrix.cpp +++ b/CPlusPlus20ForProgrammers-master/examples/ch06/matrix.cpp @@ -1,9 +1,36 @@ #include #include #include +#include + + +// abbreviated function template with constrained auto constexpr size_t rows{4}; constexpr size_t columns{4}; + + +auto Dot(auto& V, auto& B) { + auto tmp {V[0]*B[0]}; + for (int i{1}; i < B.size(); i++) + tmp+= B[i] * V[i]; + return tmp; +} + + +void MatVecMul_auto(const auto& A, const auto & V, auto& B){ + if (A[0].size() == V.size() && A.size() == B.size() ){ + for (int i{0}; i < A.size(); i++) + for (int j{0}; j < A[0].size(); j++) + B[i]+= A[i][j] * V[j]; + } + else{ + std::cout << "sizes are not compatible!"; + } +} + + + void MatVecMul(const std::array, rows>& A, const std::array& V, std::array& B); template @@ -17,10 +44,10 @@ void printArrayTemplate(const T& a); int main() { std::array A{std::array{1, 2, 3}, std::array{4, 5, 6},std::array{4, 5, 0}}; - std::array V{1, 2, 3,5}; + std::array V{1, 2, 3 }; std::array B{}; MatVecMul_template(A, B, V); - + Dot(B,V); return 0; } @@ -54,4 +81,5 @@ void MatVecMul_templatefull(const T& A, const U& V, U& B){ else{ std::cout << "sizes are not compatible!"; } -} \ No newline at end of file +} +