题目描述
在题目向量1的代码上添加类CVector的友元函数add,计算两个向量的和(对应分量相加)。
add定义如下:
CVector add(const CVector v1, const CVector v2) //函数头不可修改。
主函数输入数据,生成两个向量对象v1,v2,调用add(v1, v2).print()输出向量v1 + v2的计算结果。(假设print()为CVector类中的输出函数。)
可根据需要,为类CVector添加拷贝构造函数及其它成员函数。
输入
第一行,输入测试次数t
每组测试数据格式如下:
向量维数n
第一个n维向量值
第二个n维向量值
输出
对每组测试数据,输出两个n维向量与它们的和
样例查看模式
正常显示查看格式
输入样例1 <-复制
输出样例1
#include<iostream>
using namespace std;
class CVector
{
private:
int* data;//存储n维向量
int n; //向量维数。
public:
//(1)无参构造函数,设置n=5,data的数据分别为0,1,2,3,4;
CVector()
{
n = 5;
data = new int[5];
for (int i = 0; i < 5; i++)
{
data[i] = i;
}
}
//(2)构造函数,用虚参n1和数组a初始化n和data的数据;
CVector(int n1, int* a)
{
n = n1;
data = new int[n];
for (int i = 0; i < n; i++)
{
data[i] = a[i];
}
}
//(3)输出函数,按格式输出n维向量的值;
void print()
{
for (int i = 0; i < n-1; i++)
{
cout << data[i] << " ";
}
cout << data[n - 1] << endl;
}
//(4)析构函数。
~CVector()
{
delete[] data;
}
friend CVector add(const CVector v1, const CVector v2);
CVector(CVector& c)
{
this->n = c.n;
data = new int[n];
for (int i = 0; i < n; i++)
{
data[i] = c.data[i];
}
}
};
CVector add(const CVector v1, const CVector v2)
{
int* a = new int[v1.n];
for (int i = 0; i < v1.n; i++)
{
a[i] = v1.data[i] + v2.data[i];
}
CVector v3(v1.n, a);
return v3;
}
//在题目向量1的代码上添加类CVector的友元函数add,计算两个向量的和(对应分量相加)。
int main()
{
int t;
cin >> t;
while (t--)
{
int n;
int* a;
int* b;
cin >> n;
a = new int[n];
b = new int[n];
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
for (int i = 0; i < n; i++)
{
cin >> b[i];
}
CVector c1(n, a);
c1.print();
CVector c2(n, b);
c2.print();
add(c1, c2).print();
}
return 0;
}