【C#】 3. Vector数据类型(包含运算符重写)

来源:互联网 发布:js根据时间戳获取日期 编辑:程序博客网 时间:2024/06/06 08:13
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Reflection.Emit;using System.Reflection;namespace UserDefinedDataEXP{    class Vector<T>:Array<T>     {        // Constructor with start-index is 1 and length is 15.        public Vector(): base()        {        }        // Constructor with length parameter        public Vector(int length) : base(length)        {        }        // Constructor with length and start-index parameter.        public Vector(int length, int minIndex) : base(length, minIndex)        {        }        // Constructor with length, start-index and initial value parameters.        public Vector(int length, int minIndex, T initvalue) :  base(length, minIndex, initvalue)        {        }        #region ADD OPERATION        //委托BinaryOperatorT<T, T, T> addTT        private static BinaryOperatorT<T, T, T> addTT;        //加号实现1:Vector<T> v1,Vector<T> v2        public static Vector<T> operator +(Vector<T> v1,Vector<T> v2)         {            Vector<T> result = new Vector<T>(v1.Length, v1.MinIndex);            int delta = v1.MinIndex - v2.MinIndex;            if (addTT == null)            {                addTT = new BinaryOperatorT<T, T, T>                (GenericOperatorFactory<T, T, T, Vector<T>>.Add);            }            for (int i = v1.MinIndex; i <= v1.MaxIndex; i++)            {                result[i] = addTT(v1[i], v2[(i - delta)]);            }            return result;        }        //加号实现2:Vector<T> v1, T v2        public static Vector<T> operator +(Vector<T> v1, T v2)        {            Vector<T> result = new Vector<T>(v1.Length, v1.MinIndex);            if (addTT == null)            {                addTT = new BinaryOperatorT<T, T, T>(GenericOperatorFactory<T, T, T, Vector<T>>.Add);            }            for (int i = v1.MinIndex; i <= v1.MaxIndex; i++)            {                result[i] = addTT(v1[i], v2);            }            return result;        }        //加号实现3:T v1, Vector<T> v2        public static Vector<T> operator +(T v1, Vector<T> v2)        {            Vector<T> result = new Vector<T>(v2.Length, v2.MinIndex);            if (addTT == null)            {                addTT = new BinaryOperatorT<T, T, T>(GenericOperatorFactory<T, T, T, Vector<T>>.Add);            }            for (int i = v2.MinIndex; i <= v2.MaxIndex; i++)            {                result[i] = addTT(v2[i], v1);            }            return result;        }        #endregion        #region SUBTRACTION OPERATION        //委托BinaryOperatorT<T, T, T> subTT        private static BinaryOperatorT<T, T, T> subTT;        //减号实现1:Vector<T> v1,Vector<T> v2        public static Vector<T> operator -(Vector<T> v1, Vector<T> v2)        {            Vector<T> result = new Vector<T>(v1.Length, v1.MinIndex);            int delta = v1.MinIndex - v2.MinIndex;            if (subTT == null)            {                subTT = new BinaryOperatorT<T, T, T>                (GenericOperatorFactory<T, T, T, Vector<T>>.Subtract);            }            for (int i = v1.MinIndex; i <= v1.MaxIndex; i++)            {                result[i] = subTT(v1[i], v2[(i - delta)]);            }            return result;        }        //减号实现2:Vector<T> v1, T v2        public static Vector<T> operator -(Vector<T> v1, T v2)        {            Vector<T> result = new Vector<T>(v1.Length, v1.MinIndex);            if (subTT == null)            {                subTT = new BinaryOperatorT<T, T, T>(GenericOperatorFactory<T, T, T, Vector<T>>.Subtract);            }            for (int i = v1.MinIndex; i <= v1.MaxIndex; i++)            {                result[i] = subTT(v1[i], v2);            }            return result;        }        #endregion        #region MULPLICATION OPERATION        //委托BinaryOperatorT<T, T, T> mulTT        private static BinaryOperatorT<T, T, T> mulTT;        //乘法实现1:Vector<T> v1, T v2        public static Vector<T> operator *(Vector<T> v1, T v2)        {            Vector<T> result = new Vector<T>(v1.Length, v1.MinIndex);            if (mulTT == null)            {                mulTT = new BinaryOperatorT<T, T, T>(GenericOperatorFactory<T, T, T, Vector<T>>.Multiply);            }            for (int i = v1.MinIndex; i <= v1.MaxIndex; i++)            {                result[i] = mulTT(v1[i], v2);            }            return result;        }        //乘法实现2:T v1, Vector<T> v2        public static Vector<T> operator *(T v1, Vector<T> v2)        {            Vector<T> result = new Vector<T>(v2.Length, v2.MinIndex);            if (mulTT == null)            {                mulTT = new BinaryOperatorT<T, T, T>(GenericOperatorFactory<T, T, T, Vector<T>>.Multiply);            }            for (int i = v2.MinIndex; i <= v2.MaxIndex; i++)            {                result[i] = mulTT(v1, v2[i]);            }            return result;        }        #endregion    }}
</pre><pre name="code" class="csharp">
</pre><pre name="code" class="csharp">
</pre><pre name="code" class="csharp">
class test    {            static void Main(string[] args)            {                // Vectors and numeric matrices                int J = 10;                int sIndex = 1;                // Size, start index and element values                Vector<double> a = new Vector<double>(J, sIndex, 3.0);                Vector<double> b = new Vector<double>(J, sIndex, 2.0);                Vector<double> c = new Vector<double>(J, sIndex);                c = a + b;                c.print();                c = c + 4.0;                c.print();                c = -4.0 + c;                c.print();                c = a - b;                c.print();                c = c * 2.0;                c.print();                c = 0.5 * c;                c.print();                Console.Read();            }

0 0
原创粉丝点击