我正在使用构造函数初始化实例变量。当我打印实例变量时,它将给出错误的输出。
int main(){
int k[]={1,2,4};
int hs=3;
int n=3;
priorityq p(k,hs,n);
p.printKey();
}
class priorityq{
int key[];
int heapsize;
int n;
public:
void printKey();
priorityq(int k[],int hs, int ni);
};
priorityq::priorityq(int k[],int hs, int ni){
for(int i=0;i<ni;i++)
key[i]=k[i];
heapsize=hs;
n=n_i;
}
void priorityq::printKey(){
for(int i=0;i<heap_size;i++)
cout<<key[i]<<" ";
cout<<endl;
}
我希望输出是 1 2 4 但是越来越 3 3 4
答案 0 :(得分:5)
如果您使用的是c ++,请使用std::array
,对于动态范围数组,请使用std::vector
。除了使用[]
操作符之外,还使用at()
方法来检查越界错误:
编辑,构造函数中出现错误
int main(){
std::vector<int> k{1,2,4};
int hs=3;
int n=3;
priorityq p(k,hs,n);
p.printKey();
}
..
class priorityq{
std::vector<int> key;
int heapsize;
int n;
public:
void printKey();
priorityq(std::vector<int>& k,int hs, int ni);
};
..
priorityq::priorityq(std::vector<int>& k,int hs, int ni){
for(int i=0;i<ni;i++)
key.push_back(k.at(i));
heapsize=hs;
n=n_i;
}
void priorityq::printKey(){
for(int i=0;i<heap_size;i++)
cout<<key.at(i)<<" ";
cout<<endl;
}
答案 1 :(得分:4)
您没有为类成员key
分配任何内存。
使用std::vector<int> key;
作为成员,并在构造函数中添加key.resize(ni);
。
工作完成后,将整个东西装箱,然后使用std::priority_queue
。