Verschiedene Felder in ein Feld kopieren
-
Hallo,
Ich hab in feld1 X Punkte in einem anderen feld2 XXX Punkte usw.
Nun möchte ich feld1 in feld abspeichern, dann feld2 in feld hinzufügen, etc..double *feld1,*feld2,*feld3; double *feld;
Mit memcpy wird's wohl nicht funktionieren, schließlich müssen die Felder die gleiche Größe haben, oder?
Den Container vector<> möchte ich nach Möglichkeit vermeiden und lieber Pointer verwenden ...
Habt ihr ne Idee?
-
Mal ganz davon abgesehen, dass du mit einem std::vector (->Forensuche) besser beraten wärst müssen die Felder bei memcpy nicht die selbe Größe haben.
-
Kann ich die Kapazität eines vectors löschen? Mit clear werden ja nur die Elemente auf 0 gesetzt.
-
ga_un schrieb:
Kann ich die Kapazität eines vectors löschen? Mit clear werden ja nur die Elemente auf 0 gesetzt.
Nein. Mit der Funktion
void clear();
der Klasse vector werden alle Elemente entfernt. Der Vektor hat danach die größe 0.
Code-Hacker
-
Nein.
v.capacity() wird nach v.clear() nicht 0!
-
capacity() liefert, wieviel Speicher dem Vector z.Z. zu Verfügung steht. Aber bei clear() wird size() 0! D.h. das keine Elemente mehr im Vector vorhanden sind.
geloescht
-
ga_un schrieb:
Kann ich die Kapazität eines vectors löschen? Mit clear werden ja nur die Elemente auf 0 gesetzt.
clear setzt nicht die Elemente auf 0 sondern destruiert alle Elemente des Containers.
Die Kapazität eines Vektors kannst du wie folgt auf das implementationsabhängige Mininmum reduzieren:vector<Typ> v; // v mit irgendwas befüllen // Kapazität und Größe von v auf Minimum reduzieren: vector<Typ>().swap(v);
-
Siehe auch: http://www.sgi.com/tech/stl/Vector.html
mfg
v R
-
ga_un schrieb:
Mit memcpy wird's wohl nicht funktionieren, schließlich müssen die Felder die gleiche Größe haben, oder?
Natuerlich funktionierts mit memcpy :
feld1=new double[len1]; feld2=new double[len2]; feld3 = new double[len3]; ... feld= new double[len1+len2+len3]; mencopy((void *)feld,(void *)feld1,len1*sizeof(double)); mencopy((void *)(feld+len1),(void *)feld2,len2*sizeof(double)); mencopy((void *)(feld+len1+len2),(void *)feld3,len3*sizeof(double));
-
Das ist aber mehr als fehleranfällig so etwas. Ausserdem ist der explizite Cast nach void* unnötig.