首页 > 其他分享 >N维整型向量类

N维整型向量类

时间:2023-04-21 23:56:37浏览次数:23  
标签:cout int sum vector 整型 operator 向量

一、问题描述。

线性代数里面我们学习过n维向量,请用类vector_N来封装n维整型向量,成员如下;

私有数据成员:

²  向量维数n, int型

²  指针 p,int型

公有函数成员:

  • 无参默认构造函数,在该函数中,将n置0,将p置null;
  • 重载输入输出运算符,输入运算符,先指定向量维数,若输入为非正整数,则提示错误信息,“Error Length!”然后退出程序,若维数输入正确则分配长度为n的动态内存,并用指针p指向该内存,输出运算符依次输出向量各元素即可;
  • 重载向量的加法+、减法-、数乘*(乘数在前,乘数为int型)这三运算符;
  • 重载[]运算,例如,向量a=(1,2,3,4),a[0]的值为1,若下标越界,则输出“Error Index”,然后退出程序;
  • 返回向量维数的函数;
  • 将两个向量的内积运算定义为vector_N的友元函数;

在主函数中定义两个vector_N类对象v1,v2,均不带参数,之后对两个对象进行输入赋值,输入数乘运算的乘数,输入待取元素的下标,对两个向量进行加、减、数乘和内积运算,并将结果输出,输出v1中对应下标对应的元素。加法、减法和内积运算先判断两向量维数是否一致,若一致则输出运算结果,否则输出错误提示信息“Mismatch Length!”

二、设计思路。

1.此类需要用到动态内存的分配,所以在析构函数中应释放空间,并将指针置null,将维数n置0 

2.需要显式定义复制构造函数vector_N(vector_N &)

3.需要重载复制运算符 vector_N operator= (vector_N &)

4.退出程序用函数 _exit(0)

5.返回值类型需要为引用的形式,另一方面,在使用时就要考虑不能返回临时变量的引用

三、程序流程图。

 

四、代码实现。

#include<iostream>

#include <cmath>

#include <string>

using namespace std;

class vector_N{

private:

    int n;

    int *p;

public:

    vector_N(int nn = 0, int *pp = NULL);

    vector_N(vector_N& p);

    friend istream& operator>>(istream& input, vector_N& N);

    friend ostream& operator<<(ostream& output, vector_N& N);

    vector_N operator+(vector_N B);

    vector_N operator-(vector_N B);

    float operator*(vector_N B);

    vector_N operator*(int B);

    float operator[](int b);

    bool check(vector_N B);

 

 

};

vector_N:: vector_N(int nn, int *pp ) : n(nn), p(pp){}

vector_N::vector_N(vector_N& pp)

{

    n = pp.n;

    p = pp.p;

}

bool vector_N:: check(vector_N B)

{

    if (n != B.n){

         cout << "Mismatch Length!" << endl;

         return false;

    }

    else{

         return true;

    }

}

vector_N vector_N:: operator+(vector_N A)

{

    vector_N sum(A);

    if (check(A))

    {

         for (int i = 0; i < A.n; i++)

         {

             sum.p[i] = p[i] + A.p[i];

         }

         return sum;

    }

    else

    {

         exit(0);

    }

   

}

vector_N vector_N:: operator-(vector_N B)

{

    vector_N sum(B);

    if (check(B))

    {

         for (int i = 0; i < B.n; i++)

         {

             sum.p[i] = this->p[i] - B.p[i];

         }

         return sum;

    }

    else

    {

         exit(0);

    }

}

    float vector_N:: operator*(vector_N B)

    {

         vector_N sum(B);

         float sum1 = 0;

         if (check(B))

         {

             for (int i = 0; i < B.n; i++)

             {

                  sum.p[i] = p[i] * B.p[i];

                  sum1 += sum.p[i];

             }

             return sum1;

         }

         else

         {

             exit(0);

         }

    }

    vector_N vector_N:: operator*(int B)

    {

         vector_N re(n,p);

         for (int i = 0; i < n; i++)

         {

             re.p[i] = p[i] * n;

         }

         return re;

    }

    float vector_N:: operator[](int b)

    {

         return p[b];

    }

 

 

istream& operator>>(istream& input, vector_N& N)

{

    input >> N.n;

    if (N.n <= 0){

         cout << "Error Lenth!" << endl;

         exit(0);

    }

    else{

         N.p = new int[N.n];

         for (int i = 0; i < N.n; i++)

         {

             input >> N.p[i];

         }

    }

 

}

ostream& operator<<(ostream& output, vector_N& N)

{

    for (int i = 0; i < N.n; i++)

    {

         if (i == 0) output << "(";

         output << N.p[i];

         if (i != N.n - 1)

             output << ",";

         if (i == N.n-1) output << ")"<<endl;

    }

    return output;

}

 

int main()

{

    vector_N a, b, c; int w,e;

    cin >> a;

    cin.sync();

    cin >> b;

    cout << "请输入数乘的乘数" << endl;

    cin >> w;

    cin.sync();

    cout << "请输入待取元素下标" << endl;

    cin >> e;

    cout << "v1+v2=" << a + b << endl;

    cout << "v1-v2=" << a - b << endl;

    cout << "v1*v2=" << a*b << endl;

    cout << "v1数乘结果为" << a*w << endl;

    cout << "v1的结果为:" << a[e] << endl;

}

 

标签:cout,int,sum,vector,整型,operator,向量
From: https://www.cnblogs.com/luoqingci/p/17342251.html

相关文章

  • 基于线性支持向量机的词嵌入文本分类torch案例
    一、前言简介线性支持向量机,并使用线性支持向量机实现文本分类,输入文本通过词嵌入方法转换成浮点张量,给出torch案例线性支持向量机(LinearSupportVectorMachine,简称LinearSVM)是一种常用的分类算法,它通过一个超平面来将数据分成两类。对于线性可分的数据集,线性SVM......
  • PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SV
    全文下载链接:http://tecdat.cn/?p=26219最近我们被客户要求撰写关于银行机器学习的研究报告,包括一些图形和统计输出。该数据与银行机构的直接营销活动相关,营销活动基于电话。通常,需要与同一客户的多个联系人联系,以便访问产品(银行定期存款)是否会(“是”)或不会(“否”)订阅银行数据集我......
  • 2-29 在程序中定义一个整型变量,赋以1~100的值,要求用户猜这个数,比较两个数的大小,把结果
    设计思路:由题意可判断出可通过循环结构以及if和while判断语句相结合来完成程序的实现 流程图: 代码:#include<iostream>usingnamespacestd;intmain(){intm=96,n=0;while(m!=n){cin>>n;if(m>n)cout<<"小了"<<endl;......
  • 平面向量习题|低阶
    前言相关链接平面向量习题|高阶;典例剖析【2019高一期末考试】平行四边形\(ABCD\)中,\(AB=3\),\(AD=2\),\(\angleBAD=60^{\circ}\),若\(\overrightarrow{AE}=\lambda\overrightarrow{AB}+\overrightarrow{AD}\),且\(BD\perpAE\),则\(\lambda\)的值为【】$A.\cfrac{1}{6}$$B.\cf......
  • 深入理解 Java 的整型类型:如何实现 2+2=5?
    在开始关于Java的整型类型讨论之前,让我们先看下这段神奇的Java代码:publicstaticvoidmain(String[]args)throwsException{doSomethingMagic();System.out.printf("2+2=%d",2+2);}执行结果,控制台打印的内容:2+2=5那么doSomethingMagic方法......
  • 四元数x向量,相关用法
    Vector3operator*(Quaterionrotation,Vector3point)点绕着原点旋转指定的角度。不管如何旋转这个点都是在一个圆球的表面上(圆球半径为point到原点的距离)。 几个例子测试代码publicclassQuatTest:MonoBehaviour{publicVector3m_QuatEuler;privateV......
  • 对矩阵乘以矩阵的转置和矩阵进行奇异值分解得到的向量是一样的。
    w=rand(4,6)[Ud,Sd,Vd]=svds(w/6,4)[Ud1,Sd1,Vd1]=svds(w*w'/6,4)发现Ud和Ud1的向量值是一样的,或者是相反的。  ......
  • N维整形向量类的c++实现
    题目如下:N维整型向量类【问题描述】线性代数里面我们学习过n维向量,请用类vector_N来封装n维整型向量,成员如下;私有数据成员:² 向量维数n,int型² 指针p,int型公有函数成员:无参默认构造函数,在该函数中,将n置0,将p置null;重载输入输出运算符,输入运算符,先指定向量维数,......
  • 开发GPT知识库功能时,需要上传word文档让知识库向量化,Golang读取word文档功能
    开发GPT知识库功能时,需要上传word文档让知识库向量化,Golang读取word文档功能。找到一个开源库baliance.com/gooxml/document,但是只支持docx后缀,下面是使用方法import("baliance.com/gooxml/document")funcReadDocxAll(fileNamestring)(string,error){doc,e......
  • 向量的历史
    18世纪随着复数(二元)的几何化而以“有向线段”的存在,得到较大的发展。接着,数学家们从两个角度对二维向量进行推广,一方面,从物理应用角度,格雷斯曼将向量推广到高维空间,但是因其高度抽象性而未及时受到重视。另一方面,哈密顿从纯数学的角度将复数推广到“四元数”,“四元数”在物理上的......