array = array ??
-
was ist daran falsch ?
#include <iostream> int main() { int test1[5] = {0,1,2,3,4}; int test2[5]; test2 = test1; return 0; }
-
was ist daran falsch ?
Die Zuweisung. Weder C noch C++ erlauben die Zuweisung von Arrays.
In diesem Kontext wird ein Array als "konstanter-Zeiger-auf-erstes-Elemet" gesehen. Und da ein solcher Zeiger kein modifizierbarer lvalue ist, kann ein Array nicht auf der linken Seite einer Zuweisung stehen.
-
danke. also brauche ich ein for-schleife, nicht wahr ?
-
Original erstellt von Lawilog:
danke. also brauche ich ein for-schleife, nicht wahr ?jein.
ich würde std::memcpy bzw. std::copy verwenden.
-
hi,
habs so probiert, geht aber nicht :
int test1[5] = {0,1,2,3,4}; int test2[5]; std::memcpy(test2, test1, 5);
was mach ich noch falsch ?
-
std::copy(test1, test+5, test2);
<alogorithm>
-
Hi,
mit der 5 gibst Du nicht die "richtige" Grösse des Arrays an.
So funktioniert es, ich hoffe das ist auch der "korrekte" Weg ...int main(int argc, char *argv[]){ int test1[5] = {0,1,2,3,4}; int test2[5]; size_t i = sizeof( int[5] ); memcpy(test2, test1, i); return 0; }
-
was mach ich noch falsch ?
Du liest die Dokumentation nicht aufmerksam.
Für den dritten Parameter gilt:Number of characters to copy
Wieviel characters willst du kopieren?
Richtig 5 * sizeof(int) viele.int test1[5] = {0,1,2,3,4}; int test2[5]; std::memcpy(test2, test1, 5 * sizeof(int));
-
Welche Dokumentation ?
Beide Möglichkeiten funktioieren:
copy(test1, test1+5, test2); memcpy(test2, test1, sizeof(int[5]));
danke.
-
Na die MSDN ...
suchen nach: memcpy
void *memcpy( void *dest, const void *src, size_t count );
dann evtl: size_t
size_t unsigned integer Result of sizeof operator.
und zuguterletzt noch: sizeof
et voila: siehe da ...
Example // Example of the sizeof keyword size_t i = sizeof( int ); struct align_depends { char c; int i; }; size_t size = sizeof(align_depends); // The value of size depends on // the value set with /Zp or // #pragma pack int array[] = { 1, 2, 3, 4, 5 }; // sizeof( array ) is 20 // sizeof( array[0] ) is 4 size_t sizearr = // Count of items in array sizeof( array ) / sizeof( array[0]
[ Dieser Beitrag wurde am 21.03.2003 um 14:46 Uhr von Legolas editiert. ]
[ Dieser Beitrag wurde am 21.03.2003 um 14:47 Uhr von Legolas editiert. ]
-
Original erstellt von Lawilog:
**Welche Dokumentation ?
**jeder programmierer verwendet mindestens eine doku zu der sprache die er gerade programmiert. oder glaubst du wir lernen alle funktionen und parameter auswendig?
schlag zB in einem Buch nach, oder in deiner Compiler doku. oder frag uns nach guten links, bzw. benutze google (oder eine andere suchmaschine)
soviele möglichkeiten, such dir eine aus.
-
Nimm lieber std::copy!
-
warum eigentlich immer std::copy? Das Einbinden von algorithm für derart triviale Dinge erhöht doch nur die Compilierzeit, ohne irgendwelche Vorteile zu bringen.
-
Original erstellt von Bashar:
warum eigentlich immer std::copy? Das Einbinden von algorithm für derart triviale Dinge erhöht doch nur die Compilierzeit, ohne irgendwelche Vorteile zu bringen.hinter std::copy kann sich z.b. ein duff device verbergen, also der vorteil ist das std::copy mir denn schnellsten algo sucht und für mich implementiert
außerdem läst sich copy schneller schreiben, schneller lesen, schneller verstehen
-
Original erstellt von Dimah:
hinter std::copy kann sich z.b. ein duff device verbergen, also der vorteil ist das std::copy mir denn schnellsten algo sucht und für mich implementiert
außerdem läst sich copy schneller schreiben, schneller lesen, schneller verstehennaja... dafür ist memcpy intrinsic
wenn copy für builtins spezialisiert ist, dann ist die geschwindigkeit gleich schnell, ansonsten ist memcpy vorne.schneller lesen/verstehen stimmt nicht. memcpy lässt sich genausogut wie copy lesen/verstehen. und schneller schreiben ist kein argument.
-
der fehler liegt früher.
template<typename T,size_t SIZE> class FixedVector {//implementierung trivial und dem leser zur übung überlassen. //bitte op[] auch als const-variante machen und möglichst viel assert //benutzen. }
und dann wird die main fein zu
//noch ne übung //und wage es nicht, so details wie memcpy in der main zu verwenden
-
Der Compiler kann die Notwendigkeit für loop unrolling hoffentlich besser beurteilen als der Library-Implementor.
schneller schreiben: dazu kommt Einfügen des algorithm-Headers und jedesmal 0,5s Compilierzeit.
schneller lesen: ok
schneller verstehen: Kommentare solls auch noch geben ... ansonsten trau ich niemandem über den Weg der ernsthaft behauptet, bei einer simplen Kopierschleife Verständnisprobleme zu haben.
-
meine doku ist alles, was mit http:// beginnt.
-
#ignore Lawilog
-
Original erstellt von Shade Of Mine:
**naja... dafür ist memcpy intrinsic
wenn copy für builtins spezialisiert ist, dann ist die geschwindigkeit gleich schnell, ansonsten ist memcpy vorne.schneller lesen/verstehen stimmt nicht. memcpy lässt sich genausogut wie copy lesen/verstehen. und schneller schreiben ist kein argument.**
wieso ist memcpy vorne? entweder sind sie gleich schnell oder memcpy geht nicht
memcpy läst sich aber nicht überall benutzen und prüft die typen nicht