C++新手求助啊!!~? 400 报错 // Array.cpp : 定义控制台应用程序的入口点。
//用类模板创建的一维动态数组,谁帮忙改改重载符号+,目的是想要合并两个数组, 还有重载 //= 也出错
#include "stdafx.h"
#include "iostream"
using namespace std;
template <typename T>
class Array
{
public:
Array(){}
Array(int l) //构造函数
{
if(l<0) cout<<"throw BadInitializers()";
length=l;
data=new T[length+1];
}
~Array() //析构函数
{
delete [] data;
}
Array(const Array<T> & a)
{
length=a.length;
data=new T[length];
for(int i=0;i<length;i++)
data[i]=a.data[i];
}
T & operator [](int l)const
{
if(l>=length || l<0) cout<<"throw OutOfBounds()";
return data[l];
}
Array <T> & operator =(Array & a)
{
if(this!=&a)
{
length=a.length;
delete[] data; //释放原空间
data=new T[length]; //申请空间
for(int i=0;i<length;i++) //复制元素
data[i]=a.data[i];
}
return this;
}
friend Array <T> & operator +(Array<T> & a,Array<T> & b)
{
Array<T> ar;
int l=a.length+b.length;
ar.data=new T[l];
for(int i=0;i<a.length;i++)
ar.data[i]=a[i];
for(int j=i;j<b.length;j++)
ar.data[j]=b[j];
return ar;
}
void insert(T num,int place)
{
length=length+1;
for(int i=length-1;i>=place;i--)
{
data[i]=data[i-1];
}
data[place-1]=num;
}
void del(int place)
{
length=length-1;
for(int i=place-1;i<length;i++)
data[i]=data[i+1];
}
void print()
{
for(int i=0;i<length;i++)
cout<<data[i]<<endl;
}
T * get_data(){return data;}
int get_length(){return length;}
private:
T * data;
int length;
};
int _tmain(int argc, _TCHAR argv[])
{
Array<int> array(5),b(5),c;
int num;
for(int i=0;i<array.get_length();i++)
{
//cin>>num;
//array.get_data()[i]=num;
//b.get_data()[i]=num;
array.get_data()[i]=1;
b.get_data()[i]=1;
}
array.insert(2,2);
array.del(2);
array.print();
c=array+b;
cout<<"ccc";
c.print();
return 0;
}
for(int i=0;i<a.length;i++) ar.data[i]=a[i]; for(int j=i;j<b.length;j++) ar.data[j]=b[j];
这段逻辑有问题吧 j<b.length ,这个判断就直接为false了 应该是j<(a.length + b.length) ,而且第二个for循环给j赋值的i 属于上个for循环的局部变量吧
而且相加返回的时候 应该用赋值构造函数吧。。
######for(int i=0;i<a.length;i++) ar.data[i]=a[i]; for(int j=i;j<b.length;j++) ar.data[j]=b[j];
这段逻辑有问题吧 j<b.length ,这个判断就直接为false了 应该是j<(a.length + b.length) ,而且第二个for循环给j赋值的i 属于上个for循环的局部变量吧
对,这个我已经改过来了。
我想问下我的insert函数,每插入一个数,就要申请一个空间,以至于我的构造函数,比数组原长要申请多一个才能插入一个数,否则会出错,难道只能通过这种方法,在构造函数加长数组,有没有别的方法
for(int i=0;i<a.length;i++) ar.data[i]=a[i]; for(int j=i;j<b.length;j++) ar.data[j]=b[j];
这段逻辑有问题吧 j<b.length ,这个判断就直接为false了 应该是j<(a.length + b.length) ,而且第二个for循环给j赋值的i 属于上个for循环的局部变量吧
对,这个我已经改过来了。
我想问下我的insert函数,每插入一个数,就要申请一个空间,以至于我的构造函数,比数组原长要申请多一个才能插入一个数,否则会出错,难道只能通过这种方法,在构造函数加长数组,有没有别的方法
return ar;
有标准的std::vector<T>或std::list<T>可用,不用自己写的.
######恩, 我已经改为 Array <T> & operator +(Array<T> & a)版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。