以下是一种可能的实现:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

class Vector {
public:
    Vector(int n = 0) {
        data.resize(n);
    }

    Vector(const vector<double>& other) {
        data = other;
    }

    Vector operator+(const Vector& other) const {
        Vector result(data.size());
        transform(data.begin(), data.end(), other.data.begin(), result.data.begin(), plus<double>());
        return result;
    }

    Vector operator-(const Vector& other) const {
        Vector result(data.size());
        transform(data.begin(), data.end(), other.data.begin(), result.data.begin(), minus<double>());
        return result;
    }

    Vector operator*(double scalar) const {
        Vector result(data.size());
        transform(data.begin(), data.end(), result.data.begin(), bind1st(multiplies<double>(), scalar));
        return result;
    }

    double operator*(const Vector& other) const {
        double result = 0;
        for (int i = 0; i < data.size(); i++) {
            result += data[i] * other.data[i];
        }
        return result;
    }

    friend ostream& operator<<(ostream& out, const Vector& vec) {
        out << "(";
        for (int i = 0; i < vec.data.size(); i++) {
            out << vec.data[i];
            if (i < vec.data.size() - 1) {
                out << ", ";
            }
        }
        out << ")";
        return out;
    }

private:
    vector<double> data;
};

int main() {
    Vector vec1(3);
    vec1 = {1, 2, 3};
    Vector vec2 = {3, 4, 5};
    Vector vec3 = vec1 + vec2;
    Vector vec4 = vec1 - vec2;
    Vector vec5 = vec1 * 2;
    double dot = vec1 * vec2;

    cout << "vec1 = " << vec1 << endl;
    cout << "vec2 = " << vec2 << endl;
    cout << "vec3 = " << vec3 << endl;
    cout << "vec4 = " << vec4 << endl;
    cout << "vec5 = " << vec5 << endl;
    cout << "dot = " << dot << endl;

    return 0;
}

这个实现中,Vector类内部使用了一个vector<double>来存储向量的各个分量。在构造函数中,可以指定向量的维度。重载的运算符包括+-*,其中*既可以表示向量与标量的乘积,也可以表示向量之间的点积。此外,还重载了<<运算符,用于输出向量的各个分量。

main()函数中,创建了三个向量vec1vec2vec3,并对它们进行了加、减、乘运算。注意,加减运算可以直接使用transform()函数,而乘运算需要手动计算点积。此外,还计算了vec1vec2的点积,并输出了所有结果

用c++编写一个N维向量Vector类重载+-运算符实现N维向量的加减乘运算。N的大小由用户决定。在main中给出测试用例。

原文地址: https://www.cveoy.top/t/topic/gqCq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录