copy mit vectoren die Pointer speichern



  • Hallo,

    ich versuche folgendes:

    // In einer for-schleife mit i
        	copy(m_klasse->AccessQuelle().begin(),  // Referenz auf Vector
        		 m_klasse->AccessQuelle().end(), // Referenz auf Vector
        		 m_ziele[i].begin()); // Vector m_ziele wurde vorher mit resize angelegt.
    

    In der Quelle sind jeweils Pointer auf Klassen, allerdings enthalten die Vektoren in m_ziele nach dem kopieren stets 0 Elemente. Es werden also keine Pointer kopiert.

    Jetzt mach ich das umständlich mit einer weiteren forschleife. Wo ist denn da der Fehler?



  • Hast du für das Ziel genug Speicher reserviert?



  • Sieht jetzt so aus:

    // In einer for-schleife mit i
    
    m_ziele[i].resize( m_klasse->AccessQuelle().size() );
            copy(m_klasse->AccessQuelle().begin(), 
                 m_klasse->AccessQuelle().end(), 
                 m_ziele[i].begin());
    

    In Ziele wird weiterhin nichts kopiert 😕


  • Mod

    zwar nicht die Fehlerursache, allerdings bietet sich hier

    m_ziele[i].assign( m_klasse->AccessQuelle().begin(), m_klasse->AccessQuelle().end() );
    

    an



  • kopierenUndKaffeekochen schrieb:

    // In einer for-schleife mit i
        	copy(m_klasse->AccessQuelle().begin(),  // Referenz auf Vector
        		 m_klasse->AccessQuelle().end(), // Referenz auf Vector
        		 m_ziele[i].begin()); // Vector m_ziele wurde vorher mit resize angelegt.
    

    In der Quelle sind jeweils Pointer auf Klassen, allerdings enthalten die Vektoren in m_ziele nach dem kopieren stets 0 Elemente. Es werden also keine Pointer kopiert.

    Wie sieht denn dein m_ziele.resize-Aufruf aus und welchen Zustand hat m_ziele vor diesem Aufruf? Wenn m_ziele ein Vektor aus Vektoren ist und du nur resize auf dem "äußeren" Vektor ohne 2. Parameter aufrufst, dann haben die neuen "inneren" Vektoren die Länge 0.

    Wenn der Typ von m_ziele[i] und AccessQuelle() die gleichen sind, müsste auch das hier funktionieren:

    m_ziele.clear();
    m_ziele.resize(N,m_klasse->AccessQuelle()); // N Kopien des AccessQuelle-Vektors
    

    Sonst gibt es ja noch vector<>::assign und die Adapter std::inserter und std::back_inserter aus <iterator>.

    BTW: Beim nächten Mal einfach mehr Code zeigen, besonders die Typen.

    Gruß,
    SP


Anmelden zum Antworten