5u74Nk=cW!a+NDL?^9*ejU^48^E
zVdC?zD=9c=a_;DAaNwftPQ)UX7<4k}cnn>ky(zN!BrN+%XbTC3Hl1|(5F*+hGjElq
zCq3n?lN{_0$`3b1-E7&x5DZe(deUhjN>^1h#Kk*^Xs3{=
zly~$L_128OY3ZScmX3(~zIe1F)9<)(oLJaN#Pj36&cdwfs>k*w=ODsrS>_YMMyC@;
zaVU**PumJU%y@FW+w#?VYbhEB2n801Z
z(}I&fVagME@q3}S!TkO~bZ-FWE8U?wz_
zN)E+S?okiblSyDFVIs!V&RuPr=!&b=`y%N+6^b1lL=^_zl#$#QPo;6?Dk?aTrQ-b&
zGT_`$zpFxeCWnv>9Z8}{nRGm=LfDChqCQJQsieN7gyMaC(d~=Do0NzaJU=OqrDS%Q{<7>X&u4
zzx@%|(;8dsr@8-vvs@9ik>V`&vK~%=BNMTgb-kdh0C26Mi0t*FMO0f?-nfB%gcrHORd7hgm^T^u>jg1)uQQ
z53xY7UJMza@L-7;)+MtmLK4*&gPk;TtfW&J*6Ev!VwR}E`1DQWkruD>99HJ)A>14mUKVD)l
z_zG;RJ@)b(X-Gr{Qm(744r?J#7^4v4RF-|ygfh18{JIW
zN*&gpg%7b8q~{l2dlhEgdV^Arcn~`&FM%;}QopPxYuMhePjz|IGOnN1^CGd|m}g8z
z?7b*+$EzAt(Yl0H);Wf7rB
zhI~xquI{|3SxqP^l&Q>j|`)0LOU4wSB#w>owBH&tOzNwnFGQI|s^fpta2K`+NRzf90qNG=^9A*bX
z759VmT1bi8Zu*dBDkW6-wm%;!qxkfxP{N$c$`XuLNf%Qd?VA7jq
zy;;^1s#s5`#^EIAQz(r$m7VF-XjgD&I4Xb~zgOAt2m+Ih8
z)xrDg;M89qKJG&O^SME^@2Z0j0yqehMAA0%tACC4i5qAfN&~qWD90K8Jmd4M~v`rr!lxc
zUdvvu*bBz9MH3x}PsWU~R3?^AeHuX;n8|VO&qOShVS$*LoJ^54dK!Pwh>t&LjKxxE
z1?hsBh;QFcbG?h2ajUj(AiB5r@L{9FA5^+-v^#1Y6|mjkNr_y8x!R2DqZ$7^`d_m~
zh)44m|B!PTfAh{SVo7RNTX-Bi(5EpWK9x#5-1`yC5E>B3L2d~3+!i@dbw?y+#X2Ibl#WZr>uC|YpAfnTc;
z>ub@0ix1)~IdF8$E-McFLpG}Hc}(lkS_l43mM5RIc1Stpz-7%M-m?yz)*~sW9XS7~
z)U5A2aBDphjRtLGppk(_1{xV?WT26O|F0Q%d;Qk`icDQ@jZC+^x>KphW2eog@?2!<
zZ0i{va=9}Pc)5IA0c8EnisZ+MvwZ3Ga=ARK+jOI|eCeXyrW=jrOE1`My1`h!^liIM
zHx|p6zAkN84{PgvO4~>KdRM!})qdYk(NyGr?P|a2YzN+qmM(rOQugP*?BjLd5
zz=g=no*y8J@(n+Rj^*4VGO(bAu&$~b(GcC(R?p`r(Kx)2Ab)@FH^1}L?PmtUh
zrjWm&ZrCeT2AX(>Hz6LqZ1JJeolm4Ygz@*9{==F>YV?2F{
z$aM2R&N!+3_9d6U
zE5NN@{jIh@y?PTj*OV#rDh80Ykt#BMXfYAlzDeiXY*{=^(o<)Bf7)~Z17~DhFeu*A
z@%Ku_m8s+Jd5XLL;`mCrj6rXQ(eHDhJ4tb-C5KIJq(t7nr5Wcifd({oe(|;UaM4|`
ztv*LKo~I5h{uL%cwYx~^_)26tyh8o`8AK{-6wE4I)~mAS)AFU_Qt8m;Uv9-jxJ+g*
z!0EJ?oJ=dvTnXS*c%@l8-5p*k&QFIg*Z2C=sxdtZZe;4Tw}w8V&@QGAEk#N{p*RZK
zlwOVKB5?PwYgJF1ul7_c163LO5jyUOjO4ATmLfBo9)m&53S{0h_rMvwrXix%%Bo8I
zMrmZAk%2}A8X0J0ppk(_1{xV?WZ?fk10McWU?gkC(!T7NFP6{8j`@=51ULM|0tK|K|@Q}m0(XY2)Y^cDbUlvOK+9S^n1<6-Y%D4
z!83wKK;HqK1swtY51=OKKZDX5Cj5fZqBJz5|*7-2}ZafCfST9&`lsWl$4z
z0rX3tS3sWur9#_YDxOadDbJ+WbJN;uTW4X5aC*mJ9L*RQE3A{NB|cf=;Qd@hnzeK|0=xB
z`m@ikM;YfgF)7sYc5pWt%2O#5_O<`9@@5`PY#_Eq>x;J1OVe-jlS(TYC(
zwzduYe#qJOk5~9KPLWmY4}#whzD|PJ|71l!$NG0V?H{S|XTcv@#r`Sq2UoE_$NKg9
zw*-FQD)zmY7kk0K%^BbQmH67g4`Yn}$jNUypam%ZgW&%e_%}NFgO)x)jnc?KBLj^L
zG&0c0KqCW<3^X#($bd5g@;;iper(++b0CKZ>fn
z|8|oF+wakB;kLZ*M)$H*XkS6)*H_9}qNn(!FnQO@%N2RYYo7V?4%$ABPu_*2-&Ck@
zSXKkytfpr9y)oQI>oUod_ES{k9l4KMO|`&);PV`a#NEpNOh2FCEsE;VQ9yExr
z&)`FT*
z{AR+X;h>$sslN&KEAb4~k>7+wQNI>=y}6xjJy=KnTXpas5Z;8pX0CN>4mkDKJ-)9I
zUgLfJW#AP5%dYs>Ax@enD&*)asyAtTi#ps>jr$mP`@Ku|w_283gTTq})9hD2=K?;?
z_@j((W7VlTcD@4K$1+axojUm0I`~h4Q#^C7dAJ^bw`+~N8jk19fIo`^0I|`OVaARs
z00px+Hs+73%7F*NoG{{an`MAkT(&W^^?M#9YI3r4Issp8p*Tsmnc6aKc^5_A+H
zW$4Gs1|BKrkEyYIY$9nSiW3vZpyFs5kTk1BQ%Bpn4E!C6=W_bY#6Y)Uq_QMOM;@sdCggGi6<pMsn=xVxcNjWaBT>j2;}`%sq4OKk
zgD!J=CX}A1=!5IHjNJ{KaH-MtuJ|a924(EtTgPf_CF%PIIO=2B-~%`AV>-421Z7jZ%?^e$F!;I;9~XLrJxPuweumWyDwI>vpJzux<@td47k%mf
z-?08(Hn>2JP=w0!3DPGWxBl0GQBK4@ZpEy^RGz~yde!)U6%41okM)Ee5k;mh^XeNe
z{Sz!8ROH2sw1u8>>CZAl=%6Sv6+NN<=+a+chETfybr#VR?0Hn2{g?fVPdKB!({w+n&Vr
zchIH&+xq-`Z+0g@l$=HEZ}BVi8YnyURft8~EGmA)fapnkEtClp|Dlk@@v=U>hvF0pT$0m%J1Pr&s-#aS%0nrCb6Sxmz7Sd+QIt5
X5Wmu<#|*Xfx9_$jGEUWMUS
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
+}
+