2009-07-16 11 views
2

Ich versuche, einen Vektor zu erstellen, der Zeiger enthält, zeigt jeder Zeiger auf einen anderen Vektor eines Typs Cell, die ich mithilfe einer Struktur erstellt habe. Die for-Schleife unten erlaubt es mir, den Benutzer definieren zu lassen, wie viele Elemente es im Vektor der Zeiger gibt. Hier ist mein Code:Erstellen eines Vektors von Zeigern, die auf mehr Vektoren zeigen

vector< vector<Cell>* > vEstore(selection); 
for (int t=0; t<selection; t++) 
{ 
    vEstore[t] = new vector<Cell>; 
    vEstore[t]->reserve(1000); 
} 

Dies, glaube ich, gibt mir einen Vektor von Zeigern auf Zielvektoren des Typs Cell. Dies kompiliert, aber ich versuche jetzt push_back auf die Zielvektoren und kann nicht sehen, wie es geht.

Da der Zielvektor des Typs Zelle ist, die von einem Typ wird wie folgt hergestellt:

struct Cell 
{ 
    unsigned long long lr1; 
    unsigned int cw2; 
}; 

ich nicht, wie mit zwei Werten push_back auf diesem Zielvektor arbeiten kann?

Ich dachte ...

binpocket[1]->lr1.push_back(10); 
binpocket[1]->cw2.push_back(12); 

Da ich dieses dereferenzieren den Zeiger auf binpocket[1] gedacht, die Ziel-Array Werte enthüllt, dann wiederum jedes Element adressieren. Aber es kompiliert nicht.

kann jemand helfen ... aber das hat nur einen Wert und kompiliert sowieso nicht.

Antwort

7
Cell cell = { 10, 12 }; 
binpocket[1]->push_back(cell); 

Alternativ können Sie Ihrer Struktur einen Konstruktor geben.

struct Cell 
{ 
    Cell() {} 
    Cell(unsigned long long lr1, unsigned int cw2) 
     : lr1(lr1), cw2(cw2) 
    { 
    } 

    unsigned long long lr1; 
    unsigned int cw2; 
}; 

Dann könnten Sie

binpocket[1]->push_back(Cell(10, 12)); 

Hinweis tun, dass long long ist Nicht-Standard (noch) nicht, aber es ist eine allgemein akzeptierte Erweiterung.

+0

Vielen Dank beide – Columbo

+0

Das ist wahrscheinlich eine wirklich dumme Frage, aber warum haben Sie den Konstruktor zweimal, einmal leer? – Columbo

+0

Wenn Sie keine Konstruktoren bereitstellen, erstellt der Compiler einen leeren Standardkonstruktor (d. H. Parameterlos) für Sie. Das heißt, Sie können 'Cell cell;'. Wenn Sie einen benutzerdefinierten Konstruktor bereitstellen, wird der Compiler den Standardkonstruktor für Sie nicht erstellen. Deshalb habe ich es zur Verfügung gestellt. Sie müssen das nicht tun, wenn Sie nicht 'Cell cell;' machen wollen. – avakar

3

Geben Sie Ihre Zelle einen Konstruktor:

struct Cell 
{ 
    unsigned long long lr1; 
    unsigned int cw2; 

    Cell(long long lv, int iv) : lr1(lv), cw2(iv) {} 
}; 

Sie jetzt Dinge sagen kann, wie:

binpocket[1]->push_back(Cell(10, 12)); 

BTW, beachten Sie, dass lange, lange nicht Standard C++.

Verwandte Themen