首页 > 编程语言 >2023.4.16编程一小时打卡

2023.4.16编程一小时打卡

时间:2023-04-16 21:44:26浏览次数:33  
标签:函数 16 运算符 v1 vector 2023.4 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、先定义类,定义出成员数据。在定义出所需的成员函数。2、根据成员函数的作用去编写成员函数的作用。3、根据题目问题描述以及输入输出的数据及方式进行主函数的编写。4、调试运行。

三、代码实现:

 

  1 #include<iostream>
  2 #include<string>
  3 using namespace std;
  4 class vector_N
  5 {
  6 private:
  7     int n;
  8     int *p;
  9 public:
 10     vector_N():n(0),p(NULL){}
 11     friend istream & operator>>(istream &put,vector_N &v);
 12     friend ostream & operator<<(ostream &out,vector_N &v);
 13     vector_N operator+(vector_N &v);
 14     vector_N operator-(vector_N &v);
 15     friend vector_N operator*(int s,vector_N &v);
 16     int operator[](int a);
 17     friend int neiji(vector_N a,vector_N b);
 18     int ren(vector_N v)
 19     {
 20         return v.n;
 21     }
 22 };
 23 istream & operator>>(istream &put,vector_N &v)
 24 {
 25     put>>v.n;
 26     if(v.n<=0)
 27     {
 28         cout<<"Error Length!";
 29     }
 30     else
 31     {
 32         v.p=new int[v.n];
 33         for(int i=0;i<v.n;i++)
 34         {
 35             put>>v.p[i];
 36         }
 37     }
 38     return put;
 39 }
 40 ostream & operator<<(ostream &out,vector_N &v)
 41 {
 42     out<<"(";
 43     for(int i=0;i<v.n;i++)
 44     {
 45         out<<v.p[i]<<", ";
 46     }
 47     out<<")";
 48     return out;
 49 }
 50 vector_N vector_N::operator+(vector_N &v)
 51 {
 52     vector_N b;
 53     b.n=v.n;
 54     b.p=new int[v.n];
 55     for(int i=0;i<v.n;i++)
 56     {
 57         b.p[i]=p[i]+v.p[i];
 58     }
 59     return b;
 60 }
 61 vector_N vector_N::operator-(vector_N &v)
 62 {
 63     vector_N b;
 64     b.n=v.n;
 65     b.p=new int[v.n];
 66     for(int i=0;i<v.n;i++)
 67     {
 68         b.p[i]=p[i]-v.p[i];
 69     }
 70     return b;
 71 }
 72 vector_N operator*(int s,vector_N &v)
 73 {
 74     vector_N b;
 75     b.n=v.n;
 76     b.p=new int[v.n];
 77     for(int i=0;i<v.n;i++)
 78     {
 79         b.p[i]=s*v.p[i];
 80     }
 81     return b;
 82 }
 83 int vector_N::operator[](int a)
 84 {
 85     return p[a];
 86 }
 87 int neiji(vector_N a,vector_N b)
 88 {
 89     int sum=0;
 90     for(int i=0;i<a.n;i++)
 91     {
 92         sum+=a.p[i]*b.p[i];
 93     }
 94     return sum;
 95 }
 96 int main()
 97 {    
 98     vector_N v1,v2,v3;
 99     int a,b;
100     cin>>v1>>v2;
101     cin>>a>>b;
102     if(v1.ren(v1)!=v2.ren(v2))
103     {
104         cout<<"Mismatch Length!"<<endl;
105     }
106     else
107     {
108         cout<<v1+v2<<endl<<v1-v2<<endl<<neiji(v1,v2)<<endl;
109     }
110     cout<<a*v1<<endl;
111     if(b>(v1.ren(v1)-1)||b<0)
112     {
113         cout<<"Error Index"<<endl;
114         _exit(0);
115     }
116     else
117     {
118         cout<<v1[b]<<endl;
119     }
120     return 0;
121 }

 

四、总结:

1、输入输出运算符的重载格式:

(1)输入:friend iostream & operator>>(iostream & input,类名 &)(2)输出:friend ostream & operator<<(ostream &output,类名 &)

2、运算符重载需定义为友元函数的情况:

(1)运算符为双目运算符;(2)输入输出运算符;(3)左边的类型不是类(4)具有交换性的运算符

 

标签:函数,16,运算符,v1,vector,2023.4,operator,打卡,向量
From: https://www.cnblogs.com/lixinyao20223933/p/17324176.html

相关文章

  • 4.16趣味百题第十题
    一问题描述输入一个M进制的数x,实现对x向任意的一个非M进制的数的转换。二设计思路利用进制转化的基数与权进行转化。可以先把当前数转化为十进制,接着转化为为别的进制。利用数字与字符的转化实现不同进制的数字存储。三流程图四代码实现(c++)#include<iostream>using......
  • c++训练打卡(8)
    冒泡排序流程图:伪代码:源代码:#include<stdio.h>intmain(){ intN,i,j,Max; inta[100]; printf("请输入要比较的数据的个数:"); scanf("%d",&N); printf("请输入所要比较的数据:"); for(i=0;i<N;i++){ scanf("%d",&a[i]); } for(i=0;i<N;i......
  • 4.16每日总结
      今天完成了数据库表的大致构建。  昨天完成了人脸识别接口的调用,和界面构建的大致代码。   遇见的问题,匹配用户操作流程的数据表结构应该是什么样的?如何和团队数据库不同表之间的连接?......
  • 每日打卡-5.2
    一.问题描述小A是某工地的计算工程师。工地现有n根钢管,第i根钢管的长度为ai。现在想用这n根钢管来做一个支撑用的柱子。我么可以切割这些钢管成为更短的钢管,但是不能缝合两根钢管。为了安全起见,柱子必须用至少k根长度相同的钢管加上混凝土制成,并且要求钢管长度必须为......
  • 每日打卡
    //#include<iostream>//usingnamespacestd;//intmain()//{// longlongintA,B,C;intD;// cin>>A>>B>>D;// C=A+B;// intn=0;// longlongm=C;// while(m!=0)// {// n++;// m/=D;// }// int*a=newint[n];// for......
  • 每日打卡-5.1
    一.问题描述  小A所在的学校又迎来了一年一度的开花活动,有n名学生被评为文学优秀奖,m名学生被评为体育优秀奖。现已知两个奖项获奖同学的编号,每个同学都有唯一的编号。只有同时被评为文学优秀奖和体育优秀奖的学生才能开花,小A想知道开花的名单,请你帮他统计一下。注:1<=n,m<=1e......
  • 2023.4.16每日会议
    昨天做了什么:完成了饼状图和比例listview遇到了哪些问题:对饼状图的使用不知道今天准备做什么:尝试将数据库迁移到官方服务器 ......
  • 23-4-16--时间转换--老板的作息表
     新浪微博上有人发了某老板的作息时间表,表示其每天4:30就起床了。但立刻有眼尖的网友问:这时间表不完整啊,早上九点到下午一点干啥了?本题就请你编写程序,检查任意一张时间表,找出其中没写出来的时间段。输入格式:输入第一行给出一个正整数 N,为作息表上列出的时间段的个数。随......
  • 4.16网格布局GridLayout
    网格布局支持多行多列的表格排列。网格布局默认从左往右、从上到下排列,它新增了两个属性:columnCount属性,它指定了网格的列数,即每行能放多少个视图;rowCount属性,它指定了网格的行数,即每列能放多少个视图;......
  • 贪心_20230416
    134.加油站题目说明在一条环路上有N个加油站,其中第i个加油站有汽油gas[i]升。你有一辆油箱容量无限的的汽车,从第i个加油站开往第i+1个加油站需要消耗汽油cost[i]升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,......