Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





mejor camino entre dos puntos en grafo gigante

Iniciado por darknesrul, 28 de Diciembre de 2006, 05:20:54 AM

« anterior - próximo »

darknesrul

bueno muchas gracias por sus respuestas. Ahora voy a probar utilizando un Heap Fibonacci para ver si mejoro el tiempo. Despues comento como fue esto...

darknesrul

Bueno amigos, problema resuelto. Resulto que no era ningun problema de implementacion, ni de estructuras ni nada de lo que uno piensa en primera instancia...... que era entonces? Era la MIERDA de compilador (o IDE mejor dicho, no se que compilador usa) de Micro$oft (Microsoft Visual Studio 2005).

De casualidad se me ocurrio probar el mismo codigo en el IDE de Dev-c++ de Bloodshed (compilador gcc, creo) y anda perfecto. Responde instantaneamente con nodos que estan en dos puntas opuestas del mapa.

Con lo que ahora surge una nueva preguntilla, esta vez mas facil jeje.... Que IDE me recomiendan usar para crear una aplicacion tipo Windows que no sea demasiado dificil de entender. Lo primero que se me ocurre es Borland pero no se..... Como siempre, se escuchan propuestas!!!  :D  :D

De nuevo gracias por todas las respuestas..... muy buen foro y muy buena gente en el

swapd0

Para mi el mejor compilador es el GCC, esta mas actualizado que cualquiera, si intentas usar constructores virtuales en los demas (Borland C++ Builder 6.0, Visual C++, Visual Studio, Open Watcom) no te compilara.

Y para que sea mas facil de usar te recomiendo code blocks, yo antes usaba DevC++ pero me cambie. No me gustaba como ponian los errores y unas cuantas cosas mas.

Pero si quieres usar ventanas y cosas por el estilo... yo me decanto por el Borland C++ Builder.

Pogacha

Creo que el compilador no puede tener nada que ver, mejor revisa el codigo a ver que has hecho mal.
Por otro lado creo que Visual Studio 2005 debe ser bastante mejor que el GCC.
De todas formas el code blocks no es malo para nada y es mucho mas recomendable que el DevC++

Saludos

darknesrul

es que el codigo es exactamente el mismo, si fuera problema de este tendria que andar mal en los dos pero sin embargo en el Dev anda perfecto.

Y en cuanto a que compilador o IDE es mejor creo que ya es una cuestion de gustos y costumbre asi que cada uno tendra sus preferencias, yo por mi parte pongo las manos en el fuego por el GCC 8)

Despues voy a probar con el Builder a ver que onda....

hotcamus

El Visual 2005 trae una implementación de la STL que añade muchos checks por seguridad que no había en otras versiones. Es probable que encuentres diferencias de rendimiento incluso entre Visual 2003 y Visual 2005. Existen macros que desactivan esos checks pero no las recuerdo porque no uso esta versión del compilador. Busca en google, hay varias discusiones relativas a pérdidas de rendimiento en la STL en el 2005.

Citar
Para mi el mejor compilador es el GCC, esta mas actualizado que cualquiera, si intentas usar constructores virtuales en los demas (Borland C++ Builder 6.0, Visual C++, Visual Studio, Open Watcom) no te compilara.

¿Constructores virtuales? Esto no existe, a no ser que te refieras a implementar el idiom en cuyo caso no veo que problema hay con cualquiera de los compiladores que indicas.

darknesrul

mmm.... esto de los checks de la stl me intereso. Podrias explicar un poquito mas sobre esto ya que busque en google pero nada, sobre todo como deshabilitarlos, ya que probe el mismo codigo en Borland y anda perfecto pero estoy mas acostumbrado al Visual y no me gustaria tener que cambiarme a otro entorno a estas alturas

Fanakito

No se si seran los mismos que causan perdidas de rendimiento, pero en Visual Studio 2005 para desactivar los checked iterators tienes que poner el flag de compilacion _SECURE_SCL a 0. Eso si, en TODOS los proyectos de la solución, o empezaras a tener errores en el proceso de linkado o, aun peor, comportamientos extraños en tiempo de ejecución.

swapd0

Cita de: "hotcamus"¿Constructores virtuales? Esto no existe, a no ser que te refieras a implementar el idiom en cuyo caso no veo que problema hay con cualquiera de los compiladores que indicas.

Es un patron de diseño, no me refiero a poner virtual antes de un constructor.
[/code]

hotcamus

_SECURE_SCL es una de las macros. La otra que yo conozco es _HAS_ITERATOR_DEBUGGING.

Lo mejor para deshabilitarlos es añadirlas en las opciones de todos los proyectos de la solución /D_SECURE_SCL=0 por ejemplo.

Citar
Es un patron de diseño, no me refiero a poner virtual antes de un constructor.

A eso me referia con idiom. Si no recuerdo mal, para implementarlo sólo se hace uso de dos métodos virtuales (create y clone), por eso decía que no sé dónde encontraste el problema.

swapd0


class A
{
...
  virtual A *Clone() const;
};

class B : public A
{
  virtual B *Clone() const;
};

Esto solo compila en GCC, y los constructores virtuales se añadieron en el 97 asi que han tenido tiempo de sobra para implementarlo.

Se puede cambiar el tipo que devuelve el B::Clone, pero paso, prefiero cambiar de compilador a cambiar codigo que ya funciona.

hotcamus

Esto funciona en el Visual 2005:


class A
{
   virtual A *Clone() const {  return new A; }
};

class B : public A
{
 virtual B *Clone() const {  return new B; }
};

B b;
A* ese = b.Clone();


En cualquier caso, que use el que más le guste hasta que encuentre un problema que no pueda solucionar (yo los he tenido con el Borland).

swapd0

Yo hice la prueba con el Visual 2003 y no funciono. Ya era hora de que lo arreglaran, ya que esto se añadio en el 96 o 97.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.