目录
题目描述
定义一个CVector类如下:
class CVector
{
private:
int *data; //存储n维向量
int n; //向量维数
public:
CVector(int n1, int *a);
CVector(CVector &c);
~CVector() { delete data; }
void print();
friend CVector Add(const CVector V1, const CVector V2);
friend CVector Sub(const CVector V1, const CVector V2);
};
要求如下:
根据输入和输出实现CVector类的成员函数,并分别实现友元函数Add、Sub来实现两向量的相加和相减。
输入
第一行,输入测试次数t
每组测试数据格式如下:
向量维数n
第一个n维向量值
第二个n维向量值
输出
对每组测试数据,输出它们相加和相减后的结果
样例
输入样例
2
3
1 2 3
4 5 6
5
1 2 3 4 5
-1 2 4 6 10
输出样例
5 7 9
-3 -3 -3
0 4 7 10 15
2 0 -1 -2 -5
完整代码
#include<iostream>
#include<string.h>
#include<math.h>
#include<iomanip>
using namespace std;
class CVector
{
private:
int* data; //存储n维向量
int n; //向量维数
public:
CVector(int n1, int* a)
{
n = n1;
data = new int[n1];
for (int i = 0; i < n1; i++)
data[i] = a[i];
}
CVector(const CVector& c)
{
n = c.n;
data = new int[c.n];
for (int i = 0; i < c.n; i++)
data[i] = c.data[i];
}
~CVector() { delete data; }
void print()
{
for (int i = 0; i < n - 1; i++)
cout << data[i] << ' ';
cout << data[n - 1] << endl;
}
friend CVector Add(const CVector V1, const CVector V2);
friend CVector Sub(const CVector V1, const CVector V2);
};
CVector Add(const CVector V1, const CVector V2)
{
CVector V(V1);
for (int i = 0; i < V.n; i++)
{
V.data[i] = V1.data[i] + V2.data[i];
}
return V;
}
CVector Sub(const CVector V1, const CVector V2)
{
CVector V(V1);
for (int i = 0; i < V.n; i++)
{
V.data[i] = V1.data[i] - V2.data[i];
}
return V;
}
int main()
{
int t, n;
cin >> t;
while (t--)
{
cin >> n;
int* x = new int[n];//n维向量
for (int i = 0; i < n; i++)
cin >> x[i];
CVector v1(n, x);
for (int i = 0; i < n; i++)
cin >> x[i];
CVector v2(n, x);
Add(v1, v2).print();
Sub(v1, v2).print();
delete[]x;
}
return 0;
}
注意要点
此处加上const,否则在函数Add和Sub中对V的拷贝会报错
(除非题目要求,框架可以作简单修改)