#include <iostream>
using namespace std;
class vector{
private:
int *arr;
int n;
public:
vector(int a, int n){
for(int i = 1; i <= n; i ++)
arr[i] = a;
}
vector(){
for(int i = 1; i <= n; i ++)
arr[i] = 0;
}
void reactualizare_vector(int t, int m){
n = t;
for(int i = 1; i <= n; i ++)
arr[i] = m;
}
void afis_vector(){
for(int i = 1; i <= n; i ++)
cout << arr[i] << " ";
}
void citire_vector(int n){
for(int i = 1; i <= n; i ++)
cin >> arr[i];
}
};
int a, n, t, m;
int main()
{
cin >> a >> n;
vector p(a, n);
p.citire_vector(n);
p.afis_vector();
return 0;
}
输入:2 4 2 1 4 3
输出:2 1 4 3 0 0 0 0 1952810132 2543616 1952810096 -594764666 6422492 2002010568 2543616 -1294838125 0 0 2543616 0 0 0 0 -1294838125 6422432 0 6422500 2002070528 -974236977 0 6422508 2002010520 -1 2002121555 0 0 4199136 2543616 0
我如何确定向量的大小以不显示2 1 4 3之后的内容?
编码样式(变量命名等)非常重要。我强烈建议学习这些(在上面的评论中提到),但是我认为其他人对此问题了解得更多。我本人不认为我有良好的编码风格来提供有用的建议……我只是跳到可能至少会使您的代码正常工作的地方。
1)类向量中的n
未正确分配。您将n
输入作为全局变量,但实际上并没有进入该类。您需要分配p.n = n;
之类的值,但是由于向量类中的n
是私有的,因此您可以尝试编写函数来做到这一点。一种方法可能是将初始化程序修改为
vector(int a, int sz){
n = sz;
for(int i = 1; i <= n; i ++)
arr[i] = a;
}
但是,我认为编写一个调整大小的函数通常是一个更好的主意。
在某些编译器和设置中,应用此功能可使您的代码正常工作。
2)如前所述,您实际上应该分配指针arr
。我不知道为什么您忽略arr
中的索引0,但是如果愿意,您可以在初始化步骤中为(n+1) * sizeof(int)
分配arr
字节的内存。这样的事情可能会起作用。
vector(int a, int sz){
n = sz;
arr = (int *)(malloc((n+1)*sizeof(int)));
for(int i = 1; i <= n; i ++)
arr[i] = a;
}
3)如果必须编写向量类,则无关紧要。但是,如果没有特别要求您编写此类,并且您还有要做的重要工作,请使用std :: vector。即使在将我的修复程序应用于代码之后,std :: vector也提供了更好的性能和大量有用的功能,并且如果必须编写整个vector类,您很可能会出错并花费数小时的调试时间。避免重新发明轮子。
显然,这里写的有关内存分配的一切现在看来都是错误的。我对现代C ++内存分配一无所知。请忽略这些,并且由于我不知道如何删除已接受的答案,因此如果有人可以删除此答案。抱歉,信息过时。
感谢您,这里没有人真正帮助您。