У меня есть такая структура:
struct element{
char ulica[10];
vector<int> dane[3];
int wolne;
int w;
element *lewy, *prawy, *ojciec;
};
И я реализую вид дерева AVL. Когда ключи одинаковы, мне нужно поместить некоторые значения int в датчанин (датчанин [0], датчанин [1], датчанин [2] описывают 3 разных значения), поэтому я использую
tmp2->dane[0].push_back(number)
РЕДАКТИРОВАТЬ. Вот код, в котором я добавляю значения к этому вектору, это половина функции, потому что вторая половина связана с поворотами в 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 значения в векторе у меня есть одно, последнее добавленное значение. Вектор не добавляет новое значение в конец, а просто заменяет его.