vengo a C++ desde Java y tengo una situación de diseño común en la que tengo un elemento (no primitivo) que me gustaría eliminar de un std :: vector.ArrayList-style indexOf para std :: vector en C++?
en Java, escribiría algo como: arrayList.remove (arrayList.indexOf (myClassInstance));
en C++, con std :: vector, ¿cuál es la mejor/más eficiente forma de hacer esto?
lo mejor que puedo pensar es crear una referencia a la instancia que estoy buscando, y luego recorrer el vector hasta encontrar esa referencia. esencialmente, para comparar la dirección de memoria de cada elemento en el vector con la referencia hasta que obtenga una coincidencia.
¿estoy en el camino correcto? o hay una forma mejor de hacer esto? (tal vez usando un contenedor std diferente, solo he usado std :: vector hasta ahora.)
Asumiendo que tiene una colección de punteros o shared_ptr, std :: conjunto puede funcionar bien para usted , simplemente comparando las direcciones del puntero. Si conoce la dirección del artículo que está buscando solo mySet.borrar (ptr); – CashCow
@CashCow: ¿hay mucha diferencia en el rendimiento al iterar sobre todos los miembros de un estándar? Conjunto frente a un estándar: vector? en otro lugar de mi código, estoy llamando a un método en cada elemento del conjunto, en cada ciclo. – ericsoco