用c++编写一个N维向量Vector类重载+-运算符实现N维向量的加减乘运算。N的大小由用户决定。在main中给出测试用例。
以下是一种可能的实现:
#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()函数中,创建了三个向量vec1、vec2、vec3,并对它们进行了加、减、乘运算。注意,加减运算可以直接使用transform()函数,而乘运算需要手动计算点积。此外,还计算了vec1与vec2的点积,并输出了所有结果
原文地址: https://www.cveoy.top/t/topic/gqCq 著作权归作者所有。请勿转载和采集!