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 verstehen

    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.



  • 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


Anmelden zum Antworten