一个double类型的vector,没有把它实现成模板,专门用做普通的数值运算,接口定义在vector.hpp, 实现在vector.cpp,Vector类的整体放在了命名空间(namesapce)dutor内,在该命名空间外还实现了一些常用的全局的运算符。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | #ifndef DUTOR_VECTOR_HPP #define DUTOR_VECTOR_HPP #include <iostream> namespace dutor { class Vector { public: Vector(int dim = 1); //构造函数,默认dim = 1 Vector(double v0, double v1); //~ 以两个值v0, v1初始化一个二维点 Vector(double v0, double v1, double v2); //~ 以三个值v0, v1, v2初始化一个三维点 Vector(const Vector& dv); //~ 复制构造函数 ~Vector() { delete [] v; } int dimension() const { return dim; } int size() const { return dim; } void resize(const int); //~ 调整维度 void push_back(const double); void set(const double, ...); //~ 变参,赋值 const double operator[](const int i) const { return v[i]; } double& operator[](const int i) { return v[i]; } Vector& operator = (const Vector& dv); Vector& operator += (const Vector& dv); Vector& operator -= (const Vector& dv); Vector& operator *= (double d); Vector& operator /= (double d); double abs(); //~ 求模 double norm(); //~ 模平方 double dot(const Vector& dv); //~ 成员点乘 friend std::ostream& operator<<(std::ostream& os, const Vector& dv); private: int dim; double *v; }; inline Vector operator + (const Vector& dv) { return dv; } extern Vector operator - (const Vector& dv); extern Vector operator * (const Vector& dv, double d); extern Vector operator * (double d, const Vector& dv); extern Vector operator / (const Vector& dv, double d); extern Vector operator + (const Vector& v1, const Vector& v2); extern Vector operator - (const Vector& v1, const Vector& v2); extern double dot(const Vector& v1, const Vector& v2); //~ 非成员点乘 } /* end namespace dutor */ #endif /* DUTOR_VECTOR_HPP */ |
你好!除了代码,此处没有多少原创之物,皆为本人搜集、整理、总结之记录与心得,欢迎转载分享!转载时请尽量注明出处,将不胜感激。祝你健康、快乐!
我被名字误解了一小下,还以为你新弄了个和STL vector类似的容器类。还在想模板类不是这么个写法啊。闹了半天才回过神来是向量。
建议可以注释一下函数功能、入口参数、出口参数以及类是干什么用的。
Thanks!