21xrx.com
2024-12-22 19:21:49 Sunday
登录
文章检索 我的文章 写文章
C++定义向量类
2023-07-06 08:20:07 深夜i     --     --
C++ 向量类 定义

C++是一门通用的编程语言,它支持多种编程范式,并且可以用于各种不同的应用领域。在C++中,向量是一种常见的数据类型,用于存储一组有序的数据元素。

为了更方便地使用向量这种数据类型,可以定义一个向量类,以实现一些常见的向量操作。下面是一个使用C++定义向量类的例子:


#include <iostream>

#include <vector>

using namespace std;

class Vector {

public:

  Vector() : x(0), y(0), z(0) {}

  Vector(double x, double y, double z) : x(x), y(y), z(z) {}

  Vector operator+(const Vector& v) const {

    return Vector(x + v.x, y + v.y, z + v.z);

  }

  Vector operator-(const Vector& v) const {

    return Vector(x - v.x, y - v.y, z - v.z);

  }

  Vector operator*(double s) const {

    return Vector(x * s, y * s, z * s);

  }

  double operator*(const Vector& v) const {

    return x * v.x + y * v.y + z * v.z;

  }

  Vector operator^(const Vector& v) const {

    return Vector(y * v.z - z * v.y, z * v.x - x * v.z, x * v.y - y * v.x);

  }

  double length() const {

    return sqrt(x * x + y * y + z * z);

  }

  void normalize() {

    double l = length();

    if (l > 0.0)

      x /= l;

      y /= l;

      z /= l;

    

  }

  friend ostream& operator<<(ostream& os, const Vector& v) {

    os << "(" << v.x << ", " << v.y << ", " << v.z << ")";

    return os;

  }

private:

  double x, y, z;

};

int main() {

  Vector v1(1.0, 2.0, 3.0), v2(4.0, 5.0, 6.0);

  Vector v3 = v1 + v2;

  Vector v4 = v1 - v2;

  Vector v5 = v1 * 2.0;

  double d = v1 * v2;

  Vector v6 = v1 ^ v2;

  cout << "v1 = " << v1 << endl;

  cout << "v2 = " << v2 << endl;

  cout << "v1 + v2 = " << v3 << endl;

  cout << "v1 - v2 = " << v4 << endl;

  cout << "v1 * 2.0 = " << v5 << endl;

  cout << "v1 * v2 = " << d << endl;

  cout << "v1 ^ v2 = " << v6 << endl;

  return 0;

}

在这个例子中,Vector类定义了常见的向量操作,包括向量加、向量减、向量乘、点乘、叉乘和单位化操作。通过定义这些操作,可以方便地在程序中使用向量,并且可以在向量操作中避免繁琐的计算和错误。

需要注意的是,在实现操作时,需要考虑向量的大小和方向。例如,在点乘中,如果两个向量并不在同一方向上,点乘的结果可能并不是两个向量之间的夹角余弦值。为了避免这个问题,可以在乘法操作中使用向量的标准化值来进行计算。

总之,定义向量类是一种常见的编程技巧,可以提高程序的效率和可读性。通过定义向量类,可以方便地在程序中使用向量,并且可以在向量操作中避免繁琐的计算和错误,从而提高程序的可靠性和稳定性。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复