-
- 今天给大家一段关于向量的代码
我们知道向量a{1,2,3,4,5}和向量b{1,2,3,4,5},但是要如何用代码写出来它们之间的运算呢?
首先我用的是c++,大家也可以用其他的,那么开始看代码吧!
1.我们需要构造一个类,用来生成一些函数(构造,重载等等)
class Vector
{
public:
int* v;
Vector* p;
int len;
Vector(int size = 0);
int& operator[](int i);
Vector& operator =(Vector&);
friend Vector operator +(Vector&, Vector&);
friend Vector operator - (Vector&, Vector&);
friend int operator *(Vector&, Vector&);
friend ostream& operator <<(ostream& output, Vector&);
};
首先构造一个Vector的类,有构造函数,重载运算符函数,这都很简单,接下来就是进行函数的定义。
2.Vector::Vector(int size)
{
len = size;
v = new int[len];
for (int i = 0; i < len; i++)
{
cin >> v[i];
}
}
进行一个输入,后面就可以用构造函数来声明!!还有一个问题就是大家有时候会生成不了,比如我们后面要用到的Vector o3;?!!注意如果你要这么用的话,那么你的类中的构造函数必须进行参数赋值,如 Vector(int size = 0);如果你定义 Vector(int size );就是不行的,大家注意!
3.接下来就是重载运算符
int& Vector ::operator [](int i)//[]重载
{
if (i >= 0 && i < len)return v[i];
exit(0);
}
Vector& Vector::operator =(Vector& obj)//=重载
{
delete[]v;
len = obj.len;
v = new int[len];
for (int i = 0; i < len; i++)
{
v[i] = obj.v[i];
}
return *this;
}
ostream& operator <<(ostream& output, Vector& obj3)//<<重载
{
for (int i = 0; i < obj3.len; i++)
{
output << obj3.v[i] << " ";
}cout << endl;
return output;
}
Vector operator +(Vector& obj1, Vector& obj2)//重载向量之间的+
{
Vector temp;
for (int i = 0; i < obj1.len; i++)temp.v[i] = obj1.v[i] + obj2.v[i];
for (int i = 0; i < obj1.len; i++)
{
cout << temp.v[i] << " ";
}
cout << endl;
return temp;
}
Vector operator -(Vector& obj1, Vector& obj2)//重载-
{
Vector temp;
for (int i = 0; i < obj1.len; i++)temp.v[i] = obj1.v[i] - obj2.v[i];
for (int i = 0; i < obj1.len; i++)
{
cout << temp.v[i] << " ";
}
cout << endl;
return temp;
}
int operator (Vector& obj1, Vector& obj2)//重载
{
Vector temp; int count = 0;
for (int i = 0; i < obj1.len; i++)
{
temp.v[i] = obj1.v[i] * obj2.v[i];
count = count + temp.v[i];
}
cout << count << endl;
return count;
}
在重载+,-的时候我在重载函数中定义了一个Vector temp用来输出数据。
接下来就是设计main函数了,我是这样设计的
int main()
{
Vector o1(5); Vector o2(5);
cout << "o1:" << endl;
cout << o1;
cout << "o2:" << endl;
cout << o2;
cout << "两个向量的和:" << endl;
o1 + o2;
cout << "两个向量的差:" << endl;
o1 - o2;
cout << "两个向量的乘积:"<<endl;
o1* o2;
}
之后就可以完美运行了,当然还有更好的办法,我只是给大家看看我的代码,谢谢大家观看!!
代码需要输入两个向量,每个向量5个数加入我们输入o1{1,2,3,4,5},o2{9,8,6,5,7}南无他的结果显示如下 :
完整代码如下:
#include
#include<string.h>
using namespace std;
class Vector
{
public:
int* v;
Vector* p;
int len;
Vector(int size = 0);
int& operator[](int i);
Vector& operator =(Vector&);
friend Vector operator +(Vector&, Vector&);
friend Vector operator - (Vector&, Vector&);
friend int operator *(Vector&, Vector&);
friend ostream& operator <<(ostream& output, Vector&);
};
Vector::Vector(int size)
{
len = size;
v = new int[len];
for (int i = 0; i < len; i++)
{
cin >> v[i];
}
}
int& Vector ::operator [](int i)
{
if (i >= 0 && i < len)return v[i];
exit(0);
}
Vector& Vector::operator =(Vector& obj)//=重载
{
delete[]v;
len = obj.len;
v = new int[len];
for (int i = 0; i < len; i++)
{
v[i] = obj.v[i];
}
return *this;
}
ostream& operator <<(ostream& output, Vector& obj3)
{
for (int i = 0; i < obj3.len; i++)
{
output << obj3.v[i] << " ";
}cout << endl;
return output;
}
Vector operator +(Vector& obj1, Vector& obj2)//重载向量之间的+
{
Vector temp;
for (int i = 0; i < obj1.len; i++)temp.v[i] = obj1.v[i] + obj2.v[i];
for (int i = 0; i < obj1.len; i++)
{
cout << temp.v[i] << " ";
}
cout << endl;
return temp;
}
Vector operator -(Vector& obj1, Vector& obj2)//重载-
{
Vector temp;
for (int i = 0; i < obj1.len; i++)temp.v[i] = obj1.v[i] - obj2.v[i];
for (int i = 0; i < obj1.len; i++)
{
cout << temp.v[i] << " ";
}
cout << endl;
return temp;
}
int operator (Vector& obj1, Vector& obj2)
{
Vector temp; int count = 0;
for (int i = 0; i < obj1.len; i++)
{
temp.v[i] = obj1.v[i] * obj2.v[i];
count = count + temp.v[i];
}
cout << count << endl;
return count;
}
int main()
{
Vector o1(5); Vector o2(5);
cout << "o1:" << endl;
cout << o1;
cout << "o2:" << endl;
cout << o2;
cout << "两个向量的和:" << endl;
o1 + o2;
cout << "两个向量的差:" << endl;
o1 - o2;
cout << "两个向量的乘积:"<<endl;
o1 o2;
}