Witam
Czy można usunąć element z vectora bez przesuwania reszty jego elementów?
Na początku funkcji zapisuję adres elementów vectora do usunięcia, TabU
jest vectorem przechowującym trzy elementową tablicę, pierwszy element tablicy to numer elementu w pierwszym wymiarze tablicy, drugi to w drugim, a trzeci to numer elementu w vectorze. Na końcu funkcji usuwam te elementy z vectora, jednak po wywołaniu funkcji .erase
adres elementów w vectorze się zmienia, przez co w następnym obiegu pętli próbuję usuwać nieistniejący element, co powoduje crash programu.
std::vector <std::array <short int, 3> > TabU;
for (size_t TB_01 = 0; TB_01 < Power.Tab.size(); TB_01++){
for (size_t TB_02 = 0; TB_02 < Cb->Laser[Power.Tab[TB_01][0]][Power.Tab[TB_01][1]].size(); TB_02++){
if (Power.Tab[TB_01][2] == Cb->Laser[Power.Tab[TB_01][0]][Power.Tab[TB_01][1]][TB_02].X &&
Power.Tab[TB_01][3] == Cb->Laser[Power.Tab[TB_01][0]][Power.Tab[TB_01][1]][TB_02].Y &&
Power.Tab[TB_01][4] == Cb->Laser[Power.Tab[TB_01][0]][Power.Tab[TB_01][1]][TB_02].Z){
Cb->Laser[Power.Tab[TB_01][0]][Power.Tab[TB_01][1]][TB_02].Power -= Power.Power / Power.Tab.size();
TabU.resize (TabU.size() + 1);
TabU[TabU.size() - 1][0] = Power.Tab[TB_01][0];
TabU[TabU.size() - 1][1] = Power.Tab[TB_01][1];
TabU[TabU.size() - 1][2] = TB_02;
break;
}
}
}
for (size_t TB_01 = 0; TB_01 < TabU.size(); TB_01++){
if (Cb->Laser[TabU[TB_01][0]][TabU[TB_01][1]][TabU[TB_01][2]].Power <= 0){
Cb->Laser[TabU[TB_01][0]][TabU[TB_01][1]].erase (Cb->Laser[TabU[TB_01][0]][TabU[TB_01][1]].begin() + TabU[TB_01][2]);
}
}