天天看点

Matrix

<code>#include "Stdio.h"</code>

<code>#include "memory.h"</code>

<code>template</code><code>&lt;</code><code>typename</code> <code>T&gt;</code>

<code>void</code> <code>TypePrint(T v);</code>

<code>template</code><code>&lt;</code><code>typename</code> <code>T,</code><code>int</code> <code>M,</code><code>int</code> <code>N&gt;</code>

<code>class</code> <code>Matrix</code>

<code>{</code>

<code>public</code><code>:</code>

<code>    </code><code>Matrix(</code><code>void</code><code>){</code>

<code>        </code><code>data = </code><code>new</code> <code>T[M*N];</code>

<code>    </code><code>};</code>

<code>    </code><code>~Matrix(</code><code>void</code><code>){};</code>

<code>    </code><code>int</code> <code>getVIndex()</code>

<code>    </code><code>{</code>

<code>        </code><code>return</code> <code>M;</code>

<code>    </code><code>}</code>

<code>    </code><code>int</code> <code>getHIndex()</code>

<code>        </code><code>return</code> <code>N;</code>

<code>    </code><code>T getxy(</code><code>int</code> <code>x, </code><code>int</code> <code>y)</code>

<code>        </code><code>return</code> <code>data[x*N+y];</code>

<code>    </code><code>void</code> <code>setxy(</code><code>int</code> <code>x, </code><code>int</code> <code>y,T f)</code>

<code>        </code><code>data[x*N + y] = f;</code>

<code>    </code><code>void</code> <code>setdata(T*datap,</code><code>int</code> <code>size)</code>

<code>        </code><code>memcpy</code><code>(data,datap,size);</code>

<code>    </code><code>Matrix&lt;T,N,M&gt; transpote()</code>

<code>        </code><code>Matrix&lt;T,N,M&gt; m;</code>

<code>        </code><code>for</code><code>(</code><code>int</code> <code>i = 0; i &lt; M; i++)</code>

<code>        </code><code>{</code>

<code>            </code><code>for</code><code>(</code><code>int</code> <code>j = 0; j &lt; N; j++)</code>

<code>            </code><code>{</code>

<code>                </code><code>m.setxy(j,i,getxy(i,j));</code>

<code>            </code><code>}</code>

<code>        </code><code>}</code>

<code>        </code><code>return</code> <code>m;</code>

<code>    </code><code>Matrix&lt;T,M,N&gt; operator+(Matrix&lt;T,M,N&gt; &amp;adv)</code>

<code>                </code><code>m.setxy(getxy(i,j)+adv.getxy(i,j));</code>

<code>    </code><code>Matrix&lt;T,M,N&gt; operator-(Matrix&lt;T,M,N&gt; &amp;adv)</code>

<code>                </code><code>m.setxy(getxy(i,j)-adv.getxy(i,j));</code>

<code>    </code><code>bool</code> <code>operator==(Matrix&lt;T,M,N&gt; &amp;adv)</code>

<code>                </code><code>if</code><code>(getxy(i,j)!=adv.getxy(i,j))</code><code>return</code> <code>false</code><code>;</code>

<code>        </code><code>return</code> <code>true</code><code>;</code>

<code>    </code><code>bool</code> <code>operator!=(Matrix&lt;T,M,N&gt; &amp;adv)</code>

<code>                </code><code>if</code><code>(getxy(i,j)!=adv.getxy(i,j))</code><code>return</code> <code>true</code><code>;</code>

<code>        </code><code>return</code> <code>false</code><code>;</code>

<code>    </code><code>void</code> <code>print()</code>

<code>        </code><code>printf</code><code>(</code><code>"\n"</code><code>);</code>

<code>                </code><code>TypePrint(getxy(i,j));</code>

<code>                </code><code>printf</code><code>(</code><code>",\t"</code><code>);</code>

<code>            </code><code>printf</code><code>(</code><code>"\n"</code><code>);</code>

<code>private</code><code>:</code>

<code>    </code><code>T *data;</code>

<code>};</code>

<code>template</code><code>&lt;</code><code>typename</code> <code>T,</code><code>int</code> <code>M,</code><code>int</code> <code>N,</code><code>int</code> <code>P&gt;</code>

<code>Matrix&lt;T,M,P&gt; operator*(Matrix&lt;T,M,N&gt; &amp;x, Matrix&lt;T,N,P&gt; &amp;y)</code>

<code>    </code><code>Matrix&lt;T,M,P&gt; m;</code>

<code>    </code><code>for</code><code>(</code><code>int</code> <code>i = 0; i &lt; M; i++)</code>

<code>        </code><code>for</code><code>(</code><code>int</code> <code>j = 0; j &lt; P; j++)</code>

<code>            </code><code>T v = 0;</code>

<code>            </code><code>for</code><code>(</code><code>int</code> <code>k = 0; k &lt; N; k++)</code>

<code>                </code><code>v += (x.getxy(i,k)*y.getxy(k,j));</code>

<code>            </code><code>m.setxy(i,j,v);</code>

<code>    </code><code>return</code> <code>m;</code>

<code>}</code>

<code>Matrix&lt;T,M,N&gt; operator*(Matrix&lt;T,M,N&gt; &amp;x, T y)</code>

<code>    </code><code>Matrix&lt;T,M,N&gt; m;</code>

<code>        </code><code>for</code><code>(</code><code>int</code> <code>j = 0; j &lt; N; j++)</code>

<code>            </code><code>m.setxy(i,j,m.getxy(i,j)*y);</code>

<code>Matrix&lt;T,M,N&gt; operator*(T y,Matrix&lt;T,M,N&gt; &amp;x)</code>

<code>    </code><code>return</code> <code>x*y;</code>

<code>template</code><code>&lt;&gt;</code>

<code>void</code> <code>TypePrint(</code><code>float</code> <code>v)</code>

<code>    </code><code>printf</code><code>(</code><code>"%f"</code><code>,v);</code>

<code>void</code> <code>TypePrint(</code><code>int</code> <code>v)</code>

<code>    </code><code>printf</code><code>(</code><code>"%d"</code><code>,v);</code>

<code>#define type float</code>

<code>int</code> <code>d1[] =</code>

<code>    </code><code>1,2,</code>

<code>    </code><code>2,3,</code>

<code>    </code><code>3,0</code>

<code>int</code> <code>d2[] =</code>

<code>    </code><code>2,-3,0,</code>

<code>    </code><code>0,1,-2,</code>

<code>    </code><code>-4,5,10</code>

<code>int</code> <code>main()</code>

<code>    </code><code>Matrix&lt;</code><code>int</code><code>,3,2&gt; s;</code>

<code>    </code><code>s.setdata(d1,</code><code>sizeof</code><code>(d1));</code>

<code>    </code><code>Matrix&lt;</code><code>int</code><code>,3,3&gt; s1;</code>

<code>    </code> 

<code>    </code><code>s1.setdata(d2,</code><code>sizeof</code><code>(d2));</code>

<code>    </code><code>Matrix&lt;</code><code>int</code><code>,3,2&gt; s2 = s1*s;</code>

<code>    </code><code>Matrix&lt;</code><code>int</code><code>,2,3&gt; s3 = s2.transpote();</code><code>//转置了</code>

<code>    </code><code>s.print();</code>

<code>    </code><code>s1.print();</code>

<code>    </code><code>s2.print();</code>

<code>    </code><code>s3.print();</code>

<code>    </code><code>return</code> <code>0;</code>

<code>}                   本文转自莫水千流博客园博客,原文链接:http://www.cnblogs.com/zhoug2020/p/7803888.html,如需转载请自行联系原作者</code>