Usuwanie elementów vectora bez przesunięcia reszty

0

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]);	

		}

	}	
2

Zaczynaj usuwanie od końca.

0

Dziękuję za pomoc, nie sądziłem że rozwiązanie tego problemu może być tak proste.

1 użytkowników online, w tym zalogowanych: 0, gości: 1