2009-07-07 3 views
0

Im folgenden Code, warum es ist, dass, wenn ich die Adresse eines Kartenindex nehme (der eine Liste enthält) und ich die Adresse der Liste selbst nehme, haben sie beide verschiedene Werte.Unterschiedliche Adresse mit Kartenindexen vs. Inhalt des Kartenindexes

Siehe den folgenden Code zur Verdeutlichung.

#include <iostream> 
#include <list> 
#include <map> 

using namespace std; 

int main() 
{ 
    list<char> listA; //list of chars 

    map<int,list<char> > mapper; //int to char map 

    mapper[1] = listA; 

    cout << &(mapper[1]) << endl; 
    cout << &listA << endl; 
} 

Antwort

2

Sie erhalten verschiedene Adressen, weil Sie eine Kopie der ursprünglichen Liste erstellen und sie der Kartenstruktur zuweisen.

Verwenden Sie Zeiger (map< int, list<char>* >).

+0

Ich mag diese Idee nicht. Ich würde lieber einen Verweis auf die Kopie innerhalb dieser Karte verwenden. –

1

wird diese Linie eine Kopie des Wertes der lokalen listA hinzufügen und auf die Karte hinzufügen, bei Index 1. Sie haben nun zwei verschiedene Listen.

mapper[1] = listA; 
0

Weil die Liste auf die Karte kopiert wurde. Daher hat es denselben Wert, aber unterschiedliche Speicherplätze. Diese Zeile:

mapper[1] = listA; 

tatsächlich den Zuweisungsoperator der Liste, wo es Werte in neuen Speicherort kopiert.