Ver Mensaje Individual
  #12 (permalink)  
Antiguo 15/02/2016, 02:51
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 2 meses
Puntos: 204
Respuesta: Incrementar un iterador de un vector<MyClass>

Código C++:
Ver original
  1. bool siEstaEnBlock(vector<int>& v, int i);
  2. bool siEstaEnBlock(vector<int>& v, int i){

Las funciones únicamente hay que declararlas si las mismas son llamadas en algún punto anterior a su implementación. Si no se da el caso la declaración sobra:

Código C++:
Ver original
  1. void funcOk1(); // Declaracion
  2.  
  3. void funcOk2() // No hay declaración
  4. { return; }
  5.  
  6. int main()
  7. {
  8.   funcOk1(); // Compila porque la declaración se encuentra antes que esta línea
  9.   funcOk2(); // Compila porque la implementación se encuentra antes que esta línea
  10.   funcNoOk(); // Llegados a este punto el compilador no encuentra ni declaración ni compilación -> ERROR
  11. }
  12.  
  13. void funcOk1()
  14. { return; }
  15.  
  16. void funcNoOk()
  17. { return; }

Si una declaración sobra lo mejor es eliminarla porque no va a aportar absolutamente nada salvo problemas ¿Qué clase de problemas? Bueno, imagínate que cambias la firma de la función y te olvidas de actualizar la declaración... empezarás a recibir errores al linkar el código que te pueden hacer perder bastante tiempo... eso si no da la mala suerte que hay otra función exactamente igual en otro sitio y acabas llamando a la misma... que se puede dar el caso.

Código C++:
Ver original
  1. vector<int>::iterator itSigue;
  2. while (vStack.empty()  == false){        //recorre una componente
  3.   itSigue = nextVecino(vit.back(), Vertex[vStack.back() - 1].get_adjaList(), itNULL);
  4.   ...
  5. }

¿Ese código no es equivalente a este otro?

Código C++:
Ver original
  1. auto itSigue = Vertex[vStack.back() - 1].get_adjaList();
  2. while (vStack.empty()  == false){        //recorre una componente
  3.   ...
  4.   ++itSigue;
  5. }

Otra equivalencia:

Código C++:
Ver original
  1. bool siEstaEnBlock(vector<int>& v, int i){
  2.     vector<int>::iterator it = v.begin();
  3.     for (; it != v.end(); it++) {
  4.         if (i == *it) return true;
  5.     }
  6.     return false;
  7. }
  8.  
  9. bool siEstaEnBlock(const vector<int>& v, int i)
  10. {
  11.   auto it = std::find(v.begin(),v.end(),i);
  12.   return it != v.end();
  13. }

Por otro lado... ¿Por qué pones toda la implementación de la clase en la cabecera?? Parece una chorrada pero las implementaciones no deberían ir en la cabecera salvo casos muy puntuales... si en algun momento trabajas con proyectos más grandes verás la diferencia en los tiempos de compilación y en el mantenimiento.

Un saludo
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.