2016-04-30 7 views
0

Ich würde gerne wissen, ob es einen Weg in C++ gibt, um zwei Elemente eines Vektors zum Beispiel std :: vector so zu verbinden, dass, wenn man sich ändert, der andere automatisch ändert. Wenn nicht, gibt es einen anderen Weg?Wie verbinde ich zwei Elemente eines Vektors?

Danke.

+0

Sie können Speichern Sie 'std :: shared_ptr's in den Vektoren. Als Sie Ihre Frage getaggt haben, haben Sie das schon versucht und es hat nicht für Sie funktioniert? –

+0

@ πάνταῥεῖ Danke für die Antwort. Ich bin relativ neu in C++, sollte ich std :: vector verwenden? – Eman

+0

Sie sollten 'std :: vector >' ja verwenden. –

Antwort

3

Angenommen, Sie haben zwei Vektoren mit Instanzen der gleichen Art von Object. Dann shared_ptr<Object> verwenden Sie auf das gleiche Objekt beziehen:

vector<shared_ptr<Object>> v1; 
vector<shared_ptr<Object>> v2; 

for(int i=0;i<3;i++) { 
    v1.push_back(shared_ptr<Object>(new Object())); 
    v2.push_back(v1[i]); 
} 

Nun, wenn Sie eine Eigenschaft eines Objekts eines Vektors bearbeiten, wird das entsprechende Objekt zu aktualisiert werden:

v1[0]->value = 12; 
cout << v2[0]->value << endl; // print 12 
+0

Vielen Dank für die Antwort. Ich habe die Idee dahinter. Es ist jedoch ein bisschen anders als das, was ich brauche. Ich habe nur einen Vektor, der Doppelgänger enthält und sagen wir, er hat die Größe von 1000 Elementen. Ich möchte zum Beispiel eine Verbindung herstellen; die ersten 10 Elemente zu den jeweils letzten 10 Elementen. Wenn ich also die ersten 10 Elemente ändere, ändern sich auch die letzten 10 Elemente. – Eman

+0

@Eman Sie können dies auch in einem einzelnen Vektor tun. –

+0

@ πάνταῥεῖ Nochmals vielen Dank. – Eman

0
class A { 
    ... Your class definition 

    public: 
     int x; 
}; 
typedef std::shared_ptr<A>  APtr; 
typedef std::vector<APtr>  AVect; 

AVect v; 
APtr ptr_a = std::make_shared<A>(); //using std::make_shared<> is better than naked new allocations in code. 
v.push_back(ptr_a); 
v.push_back(ptr_a); 

v[0]->x = 3; //modifies v[1] as well