c++问题:给一个变量赋值后,另一个变量发生了变化



以下代码是我自己的索引前队列的API。当我测试插入功能时,我得到错误的答案。然后我调试代码,我发现数组qp的值在执行句子后发生了变化----item[k]=v这是在插入函数中。为什么数组qp的值在给数组赋值后会发生变化?

template <class T>
class IndexPriorQueue{
private:
int index;//the num of items
int size;//capacity
int* pq;//index binaryheap
int* qp;//qp[pq[i]]=pq[qp[i]]=i
T* item;//item array;
public:
IndexPriorQueue(int qsize){//constructor function
size=qsize;
index=0;
pq=new int(size+1);
qp=new int(size+1);
item=new T(size+1);
for(int i=0;i<size+1;i++)
qp[i]=-1;
}
void insert(int k,T v){
if(contain(k)){
cout<<"index is already in queue"<<endl;
return;
}
//cout<<"insert"<<endl;
item[k]=v;//debug,after excuting this sentence,the value of qp exchanged??
pq[++index]=k;
qp[k]=index;
swim(index);
}
bool contain(int k){
return qp[k]!=-1?1:0;
}
void swim(int j){
while(j>1){
if(item[pq[j/2]]<item[pq[j]]){
exch(j/2,j);
j=j/2;
}else{
break;
}
}
}
void exch(int m,int n){
int temp=pq[m];
pq[m]=pq[n];
pq[n]=temp;
qp[pq[m]]=m;
qp[pq[n]]=n;
}
void display(){
cout<<"item:";
for(int i=1;i<size+1;i++){
cout<<item[i]<<"  ";
}
cout<<endl;
cout<<"pq:";
for(int i=1;i<size+1;i++){
cout<<pq[i]<<"  ";
}
cout<<endl;
cout<<"qp:";
for(int i=1;i<size+1;i++){
cout<<qp[i]<<"  ";
}
cout<<endl;
}
};

以下代码是主要功能

int main(){
cout<<"before insert:"<<endl;
IndexPriorQueue<char> ipq(10);
ipq.display();
ipq.insert(1,'a');
cout<<"after insert:"<<endl;
ipq.display();
return 0;
}

问题是你的分配。举个例子

new T(size+1)

这将分配一个类型为T的对象并将其初始化为值size + 1(即它使用size + 1调用T构造函数(。

如果需要分配"数组",则应使用括号[]

new T[size+1]

这将分配一个包含size + 1数量的T对象的数组。

不过,更好的解决方案是使用std::vector而不是自己手动完成所有操作。

最新更新