题目描述
在题目向量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维向量与它们的和
输入样例
2
3
1 2 3
4 5 6
5
1 2 3 4 5
-1 2 4 6 10
输出样例
1 2 3
4 5 6
5 7 9
1 2 3 4 5
-1 2 4 6 10
0 4 7 10 15
#include <iostream>
using namespace std;
class cvector
{
int* data;
int n;
public:
cvector()
{
n = 5;
data = new int[5]{ 0,1,2,3,4 };//记得new
}
cvector(int n1, int* a)
{
n = n1;
data = new int[n]; //记得new
for (int i = 0 ; i < n; i++)
*(data + i) = *(a + i); //新申请空间,一个一个复制
}
void print()
{
for (int i = 0; i < n; i++)
{
cout << *(data + i);
if (i != n - 1) //最后一个元素不需要空格
cout << ' ';
else
cout << endl;
}
}
cvector(const cvector& c)
{
n = c.n;
data = new int[n]; //记得new
for (int i = 0; i < n; i++)
*(data + i) = *(c.data + i);
}
~cvector()
{
delete[]data;
}
friend cvector add(const cvector v1, const cvector v2);
};
cvector add(const cvector v1, const cvector v2)
{
for (int i = 0; i < v1.n; i++)
v1.data[i] += v2.data[i];
cvector cv(v1.n, v1.data);
return cv; //return cvector型
}
int main()
{
int t;
cin >> t;
while (t--)
{
int n;
cin >> n;
int* d1 = new int[n]; //记得new
for (int i = 0; i < n; i++)
cin >> *(d1 + i);
int* d2 = new int[n]; //记得new
for (int i = 0; i < n; i++)
cin >> *(d2 + i);
cvector v1(n, d1);
cvector v2(n, d2);
v1.print();
v2.print();
add(v1, v2).print();
}
}
备注:调试后发现拷贝构造函数在调用add函数之前使用。