实例变量值无法正确打印

时间:2019-10-23 11:10:41

标签: c++ oop

我正在使用构造函数初始化实例变量。当我打印实例变量时,它将给出错误的输出。

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

2 个答案:

答案 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