Deklarieren einen Vektor von Elementen der struct C, und haben die Anzahl der Elemente i (a-Eingang des Typs int) sein

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

  •  05-09-2019
  •  | 
  •  

Frage

Bitte betrachten Sie diesen Code (und den Mangel an Wissen vergeben). Es gibt Fehler, die ich nicht lösen konnte. Ich brauche einen Vektor von Elementen der Struktur C zu erklären, aber ich brauche die Anzahl der Elemente, die ich (eine Eingabe vom Typ int).

ich auch andere Ansätze versucht, aber in allen von ihnen erhielt ich einen Fehler (nicht C konvertieren int, usw.). Wie kann ich das tun?

# 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 
War es hilfreich?

Lösung

Lassen Sie sich mit einer Erklärung versuchen:)

cin >> array[i];

Das von cin in ein Objekt der Struktur C. Nun zu extrahieren versucht, so braucht es einen Operator >>, das tut eigentlich, dass die Arbeit:

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

Darüber hinaus, wie ein anderer erwähnt, müssen Sie tatsächlich die Elemente zu dem Vektor hinzufügen zuerst:

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

Für die nächste Zeit, formatieren Sie den Text (richtig Einzug it). Es war schwer für mich, durch sie zu dem Schritt:)

Andere Tipps

Welche Fehler haben Sie den Code generieren?

Ich bin auch nicht sicher, was der Code tun soll. In main (), erstellen Sie einen Vektor von C. Aber C enthält auch einen Vektor von int ist. Ist das beabsichtigt?

Ich bin nicht wirklich klar, was Sie zu tun versuchen.

Allerdings kann ich einen sehe bereits mögliche Fehler in unserem Code:

In LerVector, kommen Sie mit einem Verweis auf einen Vektor in die derzeit nicht alle Elemente darin hat, und hat daher eine Größe von 0.

Was Sie versuchen zu tun, dass, solange ich als die Größe kleiner ist, können Sie in dem Array das Element aktualisieren. Wenn Sie jedoch eine Größe beginnen 0, so dass ich nicht glaube, Sie sogar in die Eingangsschleife gehen werden.

Nun, auch wenn Sie getan haben, da der Vektor nicht mit jeder Größe initialisiert wird, können Sie eine Fehlermeldung erhalten, die Sie außerhalb der Grenzen gehen. Sie müssen die rray ändern.

, wenn ich denke, was Sie tun möchten, sollte es so aussehen:

// 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
}

Einer der std::vector<T> Bauer wird eine Anfangsgröße nehmen, und wenn nach dieser Nummer deklariert ist, ob Sie es an den Konstruktor übergeben kann.

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

Sie können auch die Größe ändern Methode verwenden, um ein Vektor der Größe zu ändern.

Sie können auch die Add-Methode verwenden, um den Vektor zu erweitern (ohne explizit eine Größe zu geben).

Aber alles in allem, es könnte einfacher sein, Hilfe zu geben mit einer Vollversion des Codes und mehr Details, was der Code versucht, zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top