一个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 */
Tags: ,.
你好!除了代码,此处没有多少原创之物,皆为本人搜集、整理、总结之记录与心得,欢迎转载分享!转载时请尽量注明出处,将不胜感激。祝你健康、快乐!
Home

RFC: Request For Comments. Orz..

Name(required)
Mail (required),(will not be published)

RFC: Request For Comments. Orz..

Website(recommended)