2012-03-28 24 views
1

Ich habe zwei Vektoren, und ich möchte den ersten mit dem zweiten füllen. Die Vektoren werden wie folgt erklärt:C++ Füllen Sie einen Vektor mit einem anderen Vektor

vector<Vec3> firstVector; 

Wo vec3 ist eine Struktur mit float x, y, z. Ich habe versucht, das gefällt, mit assign:

secondVector.assign(firstVector.begin(), firstVector.end()); 

Aber es stoppt und beschwert sich, dass es ein Problem mit dem Ende ist(). Ich habe auch Pushback versucht, aber es funktioniert natürlich nicht.

Wie ich vorher gelesen habe, sollte ich es mit assign tun, aber ich weiß nicht, wie man es richtig löst.

EDIT:

Die Fehlermeldung mit Einsatz und weisen die gleichen sind:

diese 0x00000000 ... std :: vector> * const

[size] CXX0030: Fehler: Ausdruck kann nicht ausgewertet werden
[Kapazität] CXX0030: Fehler: Ausdruck kann nicht ausgewertet werden

Und es zeigt auf Visual Studio Vektordatei zu iterat oder enden Sie mit der Rückkehr. Mit insert zeigt es auf iterator begin.

DER CODE:

Der erste Vektor ist auch Teil einer Struktur: Zu meinen loader

struct o3DModel 
{ 
    vector<Vec3> v_Vertices; 
}; 

struct Vec3 { 
public: 
Vec3() {} 

Vec3(float X, float Y, float Z) 
{ 
    x = X; 
    y = Y; 
    z = Z; 
} 

float x, y, z; 
}; 

Ich erkläre die "o3DModel" struct oben in meiner app Klasse wie folgt aus und senden es Klasse:

o3DModel *tfTable; 

void TheApp::Init() 
{ 
    objLoader->ImportOBJ(tfTable, "testcube.obj"); 
} 

die objLoader Klasse, wo ich mein "v_Vertices" Vektor erfolgreich füllen, wobei "oModel", das "tfTable" gesendet ist:

bool OBJLoader::ImportOBJ(o3DModel *oModel, char *strFileName) 
{ 
    FillObjData(oModel); 
    ... 
    return true; 
} 

void OBJLoader::FillObjData(o3DModel *oModel) 
{ 
    oModel->v_Vertices.insert(oModel->v_Vertices.begin(), v_Vertices.begin(), v_Vertices.end()); 
    // This here with insert 
    outFile2 << oModel->v_Vertices[0].x << "\n"; 
} 

Hoffe, das hilft.

+3

Ihr Code sollte funktionieren (obwohl ich nicht der Meinung bin, dass Sie "es mit assign tun sollten"). Können Sie die genaue Fehlermeldung, die Sie erhalten, posten? –

+2

Wie wird 'secondVector' deklariert und was genau ist die Fehlermeldung? (Auch ein einfacher 'secondVector = firstVector' würde das Gleiche tun). –

+0

Ich sehe ich sollte die Fehlermeldung posten. Ich bearbeite meine Frage damit. – matthew3r

Antwort

0

Okay, ich habe es gelöst, aber mit einem kleinen Kreisverkehr. In FillObjData habe ich ein neues Vec3 erstellt, ein if erzeugt, dem ersten Vec3 die X, Y, Z Koordinaten des ersten Vektors gegeben und das Vec3 in den Vektor geschoben. Und als ich meine Struktur deklariert habe, habe ich sie nicht als Zeiger deklariert. Jetzt funktioniert es perfekt.

0

sollte diese Arbeit:

vector<Vec3> secondVector(firstVector.begin(), firstVector.end()); 

das der Fall ist, wenn Sie sich mit dem vector constructor interessiert sind.

+0

@ Robᵩ ah ... ja, Tippfehler in der Tat :). – Kiril

+0

Mein Herd schmerzt jedes Mal, wenn ich in SO Post "cplusplus.com" sehe. Verwenden Sie stattdessen cppreference.com. – Griwes

+0

@Griwes yah, sie müssen ihren PageRank verbessern ... Google beschuldigen! – Kiril

1

Oder wenn Sie nicht wollen, dass es in der Ctor Gebrauch machen

secondVector = firstVector

+0

@ Robᵩ - ja sorry war etwas von etwas anderes, sowieso kein Grund nicht verwenden '=' –

1

Wenn Sie secondVector wollen auf alle Werte von firstVector und ohne andere zu übernehmen,

secondVector = firstVector; 

Wenn Sie möchten, dass jedes der Elemente von firstVector zum Ende hinzugefügt wird: secondVector:

Wenn Sie jedes der Elemente von firstVector wollen Anfang secondVector hinzugefügt werden:

secondVector.insert(secondVector.begin(), 
        firstVector.begin(), firstVector.end()); 
+0

Es gibt ein Problem mit beginnen, aber wie Sie geschrieben habe, werde ich den Code in der Frage. – matthew3r

0

Sie zweiten Vektor benötigt als Vektor von Vektoren von vec3 strucs deklariert werden.

vector<vector<Vec3>> secondVector; 
    secondVector.push_back(firstVector); 
Verwandte Themen