Declara un vector de elementos de struct C, y tiene el número de elementos sea i (una entrada de tipo int)

StackOverflow https://stackoverflow.com/questions/574060

  •  05-09-2019
  •  | 
  •  

Pregunta

Por favor, mire el código (y valga la falta de conocimiento). Genera errores que no podía resolver. Necesito declarar un vector de elementos de struct C, pero necesito el número de elementos de BE i (una entrada de tipo int).

También intentado otros enfoques, pero en todos ellos he recibido un error (no se puede convertir a int C, etc). ¿Cómo puedo hacer esto?

# include < iostream >
using std::cout;
using std::cin;
using std::endl;

# include < vector >
using std::vector;

struct C{
    int cor;
    vector<int>cores;

    };

    void LerVector( vector< C> &array ) ;

int main ()
{
     int n;
    bool done=false;
        bool don=false;
    vector<C>cidade;
    int i;


    while(!done){
    cout<<"Entre o número de cidades "<<endl;
    cin>>n;
    if(n>500)
    {
        cout<<endl;
        cout<<"O número máximo é 500"<<endl;
}
else
done=true;
}
n--;
while(!don){
cout<<"Entre o número de confederações"<<endl;
cin>>i;
if(i>100){
cout<<endl;
cout<<"Número máximo de 100 cidades"<<endl;

}
else {

 LerVector(  cidade) ;

don=true;
}
}


    cin.get();
    return 0;
}
//resolve...
 void LerVector( vector< C> &array ) 
  { 
    for ( size_t i = 0; i < array.size(); i++ ) 
      cin>>array[i];

  } // end function inputVector 
¿Fue útil?

Solución

Vamos a probar con una explicación:)

cin >> array[i];

Eso intenta extraer de cin en un objeto de estructura C. Bueno, por lo que necesita un operador >> que realmente hace que el trabajo:

istream & operator>>(istream &is, C &c) {
    is >> c.cor; // or into whatever member 
    return is;
}

Además, como se mencionó otra, hay que añadir los elementos de hecho a la primera vectorial:

while(!don){
    cout<<"Entre o número de confederações"<<endl;
    ....
} else {
    cidade.resize(i); // resize to i elements
    LerVector(cidade);
    don = true;
}

Para la próxima vez, por favor, dar formato al texto (guión correcta él). Fue difícil para mí dar un paso a través de él:)

Otros consejos

¿Qué errores generó su código?

Además, no estoy seguro de lo que se supone que el código para hacerlo. En main (), se crea un vector de C. Pero C también contiene un vector de la int. Está previsto que?

No estoy muy claro lo que estamos tratando de hacer.

Sin embargo, puedo ver ya un error potencial en nuestro código:

En LerVector, puedes venir con una referencia a un vector que actualmente no tiene ningún artículo en ella, y por lo tanto tiene un tamaño de 0.

Lo que estamos tratando de hacer es que siempre que i es menor que el tamaño, actualizar ese elemento en la matriz. Sin embargo, cuando se empieza tamaño es 0, así que no creo que incluso se va a entrar en el bucle de entrada.

Ahora, incluso si lo hiciera, ya que el vector no se ha inicializado con cualquier tamaño, se puede obtener un error que va fuera de límites. Usted tiene que cambiar el tamaño de la RRay.

Si Creo que lo que quiere hacer, debe ser así:

// First create an empty vector of C's
vector<C> cidade;

// cidade has zero elements now
// Read i from user
cin >> i;

// Resize vector to contain i elements
cidade.resize(i);

// Then go on and fill them.
int n;
for (n = 0; n < i; i++) {
  cin >> cores;
  cidade[n].cores.resize(cores);
  // now cidade[n].cores has 'cores' elements, but they are uninitialized
}

Uno de los constructores std::vector<T> tendrá un tamaño inicial, y si se declara después de que el número es sabe que puede pasarlo al constructor.

cin >> n;
std::vector<C> cidade(n);

O puede utilizar el método de cambio de tamaño para cambiar el tamaño de un vector.

O puede utilizar el método Add para extender el vector (sin dar explícitamente un tamaño).

Pero, en general, puede ser que sea más fácil dar ayuda con una versión completa del código y más detalles de lo que el código está tratando de hacer.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top