Tengo un vector en el que cada elemento es un par. Estoy confundido con la sintaxis. Por favor alguien puede decirme cómo iterar sobre cada vector y a su vez cada elemento de par a acceder a la clase.

    std::vector<std::pair<MyClass *, MyClass *>> VectorOfPairs;

Además, tenga en cuenta, voy a estar pasando los valores de entre la función, por lo tanto VectorOfPairs con ser aprobada por el puntero que es *VectorOfPairs en algunos lugares de mi código.

Agradezco su ayuda. Gracias

OriginalEl autor Romaan | 2012-10-08

3 Comentarios

  1. 8

    Aquí es un ejemplo. Nota: estoy usando un typedef para alias de largo, feo typename:

    typedef std::vector<std::pair<MyClass*, MyClass*> > MyClassPairs;
    
    for( MyClassPairs::iterator it = VectorOfPairs.begin(); it != VectorOfPairs.end(); ++it )
    {
      MyClass* p_a = it->first;
      MyClass* p_b = it->second;
    }

    OriginalEl autor John Dibling

  2. 11

    Esto debería funcionar (suponiendo que tiene un C++11 compatible compilador)

    for ( auto it = VectorOfPairs.begin(); it != VectorOfPairs.end(); it++ )
    {
       //To get hold of the class pointers:
       auto pClass1 = it->first;
       auto pClass2 = it->second;
    }

    Si usted no tiene auto tendrás que utilizar std::vector<std::pair<MyClass *, MyClass *>>::iterator lugar.

    Personalmente no soy un fan de auto. No downvote tho, buena respuesta.
    Es genial para los iteradores, es también obligatoria para ciertos tipos de patrones de plantilla.
    Entiendo las razones por las que auto fue agregado el idioma. Estoy bien con su uso cuando es necesario. Yo creo que el uso de auto cuando no se necesita es un poco perezoso, y podría contribuir a una generación de programadores que no saben realmente lo que están haciendo. Sospecho que estoy bastante por mi cuenta con esta opinión, sin embargo.
    Creo que sería una preocupación válida si no era inflexible. Sin embargo, usted tiene que saber lo que realmente es con el fin de pasar a una función (por ejemplo) así que no creo que el conocimiento requerido es menos. Sólo contenedoras hasta de lo contrario, feo/largo declaraciones.

    OriginalEl autor Benj

  3. 5

    Otra opción si usted tiene un C++11 compatible con el compilador es el uso de la gama basado for bucles

    for( auto const& v : VectorOfPairs ) {
      //v is a reference to a vector element
      v.first->foo();
      v.second->bar();
    }
    +1: me gustaría que mi C++11 «conforme» de los principales proveedores compilador de rango basados en bucles. 🙁

    OriginalEl autor Praetorian

Dejar respuesta

Please enter your comment!
Please enter your name here