当行和列的值是用户定义的时,在c++中追加行或列

append row or column in c++ when row and column values are user defined

本文关键字:c++ 追加 用户 定义      更新时间:2023-10-16

当矩阵的大小在运行时决定时,我已经编写了这段代码来使用类执行以下任务,也就是说,我想将矩形矩阵创建为方形矩阵,这样附加的列或行将所有元素都作为1

5 4 5
2 3 1

5 4 5
2 3 1
1 1 1
class Array{
int **p,r,c;
public:
void setsize();
void read();
void print();
void createsqm();
};
void Array :: setsize()
{
cout<<" Enter rows and cols "<<endl;
cin>>r>>c;
if(r>c)
{
p = new int *[r];
for(int i =0; i<r; i++)
{
p[i] = new int [r];
}
}
else
{
p = new int *[c];
for(int i =0; i<c; i++)
{
p[i] = new int [c];
}   
}
}
void Array :: read()
{
int i,j;
for(i=0;i<r;i++)
{
for(j=0; j<c; j++)
{
cin>>p[i][j];
}
}
}
void Array :: createsqm()
{
if (r>c)
{
int i,j;
for(i=0;i<r;i++)
{
for(j=c; j<r; j++)
p[i][j]=1;
}   
}
else
{   int i,j;
for(j=0;j<c;j++)
{
for(i=r; i<c;i++)
p[i][j]=1;
}   
}   
}

我想知道我在哪里犯了错误

您的问题是:

我想知道我在哪里犯了错误

有几个层,你会在其中犯错误。

  • 要求:

您希望在C++中实现一个数组,尽管所有内容(std::arraystd::vector等(都可用。除非出于学术目的,否则不要这样做。

  • 设计

您确实在C++中使用了new和指针(用于自有内存(以及纯C风格数组。你不应该(必须(使用new。此外,请永远不要对资源使用指针,比如拥有的内存。不要这样做。避免使用C样式数组。没有必要,而且它们很容易出错。

  • 实现

硬错误:

createsqm将写越界。它会破坏内存。您的数组具有初始大小,并且您正在访问不存在的行或库。

您没有初始化变量

您使用的内存可能未分配。没有检查

在访问原始内存之前没有边界检查。这将导致您的代码出现问题。

  • 其他

保持严格的范围界定。例如在for语句中定义循环可变,而不是在上面。

命名你的变量,这样任何人(例如3个月后的你(都可以理解代码。

不要打开完整的std-命名空间

遵循一些编码标准和缩进标准。