【发布时间】:2011-12-30 15:02:17
【问题描述】:
我有这样的结构:
struct element{
char ulica[10];
vector<int> dane[3];
int wolne;
int w;
element *lewy, *prawy, *ojciec;
};
我正在实现一种 AVL 树。当键相同时,我需要将一些 int 值放入 dane(dane[0]、dane[1]、dane[2] 描述 3 个不同的值),所以我使用
tmp2->dane[0].push_back(number)
编辑。这是我向该向量添加值的代码,它是函数的一半,因为 secod half 是关于 AVL 中的旋转。
void wstaw_wezel(){
element *tmp2; //tmp2 bedzie ojcem nowo wstawionego elementu
tmp2=korzen;
while(tmp2!=NULL){
if(strcmp(tmp2->ulica, tmp->ulica)<0){
if(tmp2->prawy!=NULL){
tmp2=tmp2->prawy;
}
else{
tmp->ojciec=tmp2;
tmp2->prawy=tmp;
cout<<"Wstawiam pod prawy "<<tmp2->ulica<<endl;
if(tmp2->w!=0) tmp2->w=0;
else tmp2->w=-1;
break;
}
}
else if(strcmp(tmp2->ulica, tmp->ulica)>0){
if(tmp2->lewy!=NULL){
tmp2=tmp2->lewy;
}
else{
tmp->ojciec=tmp2;
tmp2->lewy=tmp;
if(tmp2->w!=0) tmp2->w=0;
else tmp2->w=1;
cout<<"Wstawiam pod lewy "<<tmp2->ulica<<endl;
break;
}
}
else{
cout<<"2 bloki na tej samej ulicy"<<endl;
for(int i=0; i<tmp2->dane[0].size(); i++) cout<<tmp2->ulica<<" "<<tmp2->dane[0][i]<<endl;
tmp2->numery.push_back(tmp->numery[0]);
tmp2->dane[0].push_back(tmp->dane[0][0]);
for(int i=0; i<tmp2->dane[0].size(); i++) cout<<tmp2->ulica<<" "<<tmp2->dane[0][i]<<endl;
tmp2->dane[1].push_back(tmp->dane[1][0]);
tmp2->dane[2].push_back(tmp->dane[2][0]);
tmp2->wolne+=tmp->dane[2][0];
break;
}
}
if(tmp->ojciec==NULL){
korzen=tmp;
return;
}
其中 tmp2 是指向此结构的指针(我检查了它指向的地址,并且每次它都是相同的地址)。
问题出在哪里?如果我向向量添加新值,直到我执行它的循环结束。最后反而有fe。向量中的 4 个值我有一个,最后一个添加的值。 Vector不要在末尾添加新值,只是替换它。
【问题讨论】:
-
“不起作用”有点有点模糊。什么错误?
-
你真的需要一个向量数组吗?发布描述问题的最小代码示例。
-
请发布您提到的循环。
-
你可能想要类似 vector
dane;所以像 tmp2->dane.push_back(number) -
循环添加。我需要向量数组,而不是总大小为 3 的向量。