<html><head></head><body bgcolor="#FFFFFF"><div>Buenos días Miguel, me alegra que acertara un poco a la respuesta al problema.</div><div><br></div><div>En ese código que envíe, da igual el orden en que lo pones, ya que el objeto como tal es almacenado en una variable auxiliar y no se elimina de la memoria</div><div><br></div><div>Pues el problema continua en la eliminación y eso va a depender de acuerdo a como trabaje la librería que estés utilizando. Pero si el método que tienes destruye todo al final, no es de extrañarse que cuando quieras mostrar los valores que contiene el vector estuvieran vacíos o no existieran. </div><div><br></div><div><span class="Apple-style-span" style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969); -webkit-composition-fill-color: rgba(175, 192, 227, 0.230469); -webkit-composition-frame-color: rgba(77, 128, 180, 0.230469); ">Vector<Shared_Ptr<Obj>></span> vectorNuevo(){</div><div>Vector<Shared_Ptr<Obj>> vec=generaVector(); </div><span class="Apple-style-span" style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.296875); -webkit-composition-fill-color: rgba(175, 192, 227, 0.230469); -webkit-composition-frame-color: rgba(77, 128, 180, 0.230469); ">Vector<Shared_Ptr<Obj>> nuevo;</span><div><span class="Apple-style-span" style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969); -webkit-composition-fill-color: rgba(175, 192, 227, 0.230469); -webkit-composition-frame-color: rgba(77, 128, 180, 0.230469);"><span class="Apple-style-span" style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.296875); ">Vector<Shared_Ptr<Obj>>::iterator it;</span><br></span></div><div><span class="Apple-style-span" style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969); -webkit-composition-fill-color: rgba(175, 192, 227, 0.230469); -webkit-composition-frame-color: rgba(77, 128, 180, 0.230469);"><span class="Apple-style-span" style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.296875); ">for(it=vec.begin();it!=vec.end();it++){</span></span></div><div><span class="Apple-style-span" style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969); -webkit-composition-fill-color: rgba(175, 192, 227, 0.230469); -webkit-composition-frame-color: rgba(77, 128, 180, 0.230469);">if(probarObjeto(*it)){ // metodo probarObjeto ira de acuerdo a lo que necesites validar para agregar una instancia al nuevo vector</span></div><div><span class="Apple-style-span" style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969); -webkit-composition-fill-color: rgba(175, 192, 227, 0.230469); -webkit-composition-frame-color: rgba(77, 128, 180, 0.230469);">nuevo.push_back(*it);</span></div><div><span class="Apple-style-span" style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969); -webkit-composition-fill-color: rgba(175, 192, 227, 0.230469); -webkit-composition-frame-color: rgba(77, 128, 180, 0.230469);">vec.erase(it);</span></div><div><span class="Apple-style-span" style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969); -webkit-composition-fill-color: rgba(175, 192, 227, 0.230469); -webkit-composition-frame-color: rgba(77, 128, 180, 0.230469);">}</span></div><div><span class="Apple-style-span" style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969); -webkit-composition-fill-color: rgba(175, 192, 227, 0.230469); -webkit-composition-frame-color: rgba(77, 128, 180, 0.230469);"><span class="Apple-style-span" style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.296875); ">}</span></span></div><div><span class="Apple-style-span" style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969); -webkit-composition-fill-color: rgba(175, 192, 227, 0.230469); -webkit-composition-frame-color: rgba(77, 128, 180, 0.230469);"><span class="Apple-style-span" style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.296875); ">EliminarVector(vec); // metodo para destruir el vector y su contenido</span></span></div><div><div><span class="Apple-style-span" style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969); -webkit-composition-fill-color: rgba(175, 192, 227, 0.230469); -webkit-composition-frame-color: rgba(77, 128, 180, 0.230469);">return nuevo;<br></span><div>}</div><div><br></div><div>Prueba crear un método que únicamente destruya todo y en la ejecución del programa lo llamas hasta el final, con eso separas muy bien la funcionalidad del método, ya que la idea de cualquier método es que realice una única función lógica. Es decir, si tienes un método para generar un vector, lo único que debería hacer es eso, y si deseas ordenar un vector, eso seria un método aparte. Con esto cada función queda separada y es mas practico de probar, ademas de ser una recomendable practica para programar.</div><div><span class="Apple-style-span" style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969); -webkit-composition-fill-color: rgba(175, 192, 227, 0.230469); -webkit-composition-frame-color: rgba(77, 128, 180, 0.230469); "><br></span></div><div><span class="Apple-style-span" style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969); -webkit-composition-fill-color: rgba(175, 192, 227, 0.230469); -webkit-composition-frame-color: rgba(77, 128, 180, 0.230469); ">Ahora bien, el uso de una variable local es posible generarlo dentro del método, así que también puede ser de ayuda para ir probando o haciendo debugging en el código. Y con la ayuda del código separado por métodos, ya seria mas rápido de descubrir el error. Pero como mencione, si eliminas todo al final del método y si lees el vector nuevo que probablemente lo hayas llenado con los punteros del vector viejo y no se había realizado la eliminación pertinente, lo cual daría un vector nuevo con punteros que apuntan a NULL o algo parecido. Con tan solo aplicar la misma idea del código que había enviado, debería bastar para solucionar el problema.</span></div><div><span class="Apple-style-span" style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969); -webkit-composition-fill-color: rgba(175, 192, 227, 0.230469); -webkit-composition-frame-color: rgba(77, 128, 180, 0.230469); "><br></span></div><div><span class="Apple-style-span" style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969); -webkit-composition-fill-color: rgba(175, 192, 227, 0.230469); -webkit-composition-frame-color: rgba(77, 128, 180, 0.230469); ">Erl 20/07/2014, a las 02:40 a.m., Miguel Ángel Torres Fernández-Píñar<<a href="mailto:miguelangeltorresfp@gmail.com">miguelangeltorresfp@gmail.com</a>> escribió:</span></div><div><br></div><div></div><blockquote type="cite"><div><div dir="ltr"><div><div><div><div><div><div><div><div><div><div>Buenos días Jose Roberto y muchas gracias por tu respuesta.<br><br></div>Supongo que en tu ejemplo tendría que ser :<br><br></div>nuevo.push_back(obj);<br></div>
vec.erase(it);<br><br></div>Creo que lo pusistes al revés de cómo me decías, no ???<br><br></div>Profundizo un poco más en el problemas.<br></div>En los contenedores estoy guardando objetos del tipo :<br></div>Shared_Ptr<Obj> . Pero usando una clase punteros de mi profe, no la que viene con C++ 11.<br>
</div>Así que creo que no me sirve lo de crearme una variable local porque de igual modo, al estar todo esto metido en un método, al final del método se destruye todo.<br><br></div>Uf, no sé, estoy hecho un lío, pero sí, el tema va por donde tú dices Jose Roberto.<br>
<br></div>Muchas gracias.<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">El 20 de julio de 2014, 5:43, Jose Roberto <span dir="ltr"><<a href="mailto:joser1993@gmail.com" target="_blank">joser1993@gmail.com</a>></span> escribió:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Probablemente estes usando el mismo objeto que tiene el iterador que recorre el primer vector y estes eliminando el contenido del iterador antes de agregar el objeto al segundo vector. Es decir, que estes eliminando el objeto una vez que lo eliminas del vector. Si este es el caso, considera guardar el objeto en una variable auxiliar y usala para agregar ese objeto al segundo vector, eso seria lo mas didactico. Pero lo considerable es que si consigues un objeto que debas agregar al otro vector, se deberia agregar primero el objeto y despues eliminarlo del vector original.<div>

<br></div><div>Espero que con este codigo se entienda un poco mas la idea</div><div><br></div><div><div>#include <vector></div><div>#include <iostream></div><div><br></div><div>using namespace std;</div><div>
<br>
</div><div><br></div><div>int main(){</div><div><span style="white-space:pre-wrap">   </span>vector<int> vec;</div><div>        for(int i=0; i<6; i++){</div><div>                vec.push_back(i);</div><div>        }</div>

<div><br></div><div><span style="white-space:pre-wrap"> </span>vec<int> nuevo;</div><div>        vec<int>::iterator it;</div><div>        int obj; // Este ejemplo consideremoslo como objetos tipo int</div>
<div>        for(it=vec.begin(); it!=vec.end();it++){</div><div>                obj=*it;</div><div>                if(obj%2==0){</div><div>                        vec.erase(it);</div><div>                        nuevo.push_back(obj);</div>

<div>                }</div><div>        }</div><div><br></div><div><span style="white-space:pre-wrap">     </span>for(it=nuevo.begin(); it!=nuevo.end(); it++){</div><div>                cout<<*it<<endl;</div>
<div>        }</div><div>}</div><div><br></div></div><div>Saludos</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">El 19 de julio de 2014, 20:36, Facundo Curti <span dir="ltr"><<a href="mailto:facu.curti@gmail.com" target="_blank">facu.curti@gmail.com</a>></span> escribió:<div>
<div class="h5"><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">El día 19 de julio de 2014, 23:16, Miguel Ángel Torres Fernández-Píñar<br>
<<a href="mailto:miguelangeltorresfp@gmail.com" target="_blank">miguelangeltorresfp@gmail.com</a>> escribió:<br>
<div><div>> Hola, saludos a todos.<br>
><br>
> Recorre un contenedor de objetos mediante iteradores.<br>
><br>
> Elimino sin problemas un elemento de este contenedor.<br>
><br>
> Pero mi problema viene cuando quiero agregar justo este elemento a otro<br>
> contenedor.<br>
><br>
> No sé cómo hacer esto.<br>
><br>
> Se agrega pero luego el programa falla por algún problema de memoria.<br>
><br>
> No sé si con estos datos del problema es suficiente.<br>
><br>
> Gracias y saludos !!!<br>
><br>
</div></div>> _______________________________________________<br>
> Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br>
> <a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
> Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
<br>
Seria bueno que subieras el código para que podamos ayudarte.<br>
Seguramente estas escribiendo fuera de los limites. No puedes guardar<br>
2 litros de agua en una botella de 500cc. Seguramente lo mismo estas<br>
haciendo con el arreglo. De ser así, tendrías que ver de asignarle<br>
memoria con malloc.<br>
Repito, seria bueno que colocaras el código, así podremos ayudarte.<br>
<br>
Saludos! ;)<br>
<br>
_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
</blockquote></div></div></div><span class="HOEnZb"><font color="#888888"><br><br clear="all"><div><br></div>-- <br>José Roberto
</font></span></div>
<br>_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br></blockquote></div><br></div>
</div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a></span><br><span><a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a></span><br><span>Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a></span></div></blockquote></div></div></body></html>