Array clonen!?



  • Hallo!
    Ich habe ein Array int name1[9][9] und will das clonen. Also will ich am Ende ein zweites Array haben mit dem selben Inhalt.

    #include ... 
    
    int main()
    {
    }
    
    void methode()
    {
    int name2[9][9]=name1; 
    }
    

    > compiler fehler: .\arraykopie.cpp(59) : error C2106: '=' : left operand must be l-value 😕

    wie clone ich also ein array (nicht global!) ?

    mfg
    house :xmas1:



  • Also entweder kopierst du jedes Element einzeln (einfach) oder versuchst direkt die Speicherbereiche zu kopieren (schwieriger). Für CArray gibt es IMHO auch einen copy-constructor.



  • ja den hätte ich dann gerne 😉 ?

    kann mir jemand ein beispiel schreiben? habe in der library geguckt, aber das habe ich nicht ganz verstanden ...
    bzw ich habe es so:

    using namespace System;
    using namespace System::Globalization;
    
    #include <windows.h>
    #include <stdio.h>
    #include <iostream.h>
    
    int test[20];
    
    int main()
    {
    
    	for(int i=1; int i<21;i++)
    	{
    		test[i]=(4468%i)*4;
    	}
    
    	array<int>clone=(array<int>)test->Clone();
    
    	for(int i=1; int i<21;i++)
    	{
    		printf("original: %d",test[i]);
    		printf("clone:    %d",clone[i]);
    
    	}
    
    	Sleep(20000);
    
    }
    

    verstanden. da gibt mir der compiler 14 fehler ? also ich blick da nicht ganz durch kann mir jemand sagen, wie ich das einfacher clone ? (ohne jedes element zu kopieren)

    mfg
    house



  • Hallo

    Du solltest dir mal genau die Fehler anschuen, die dir dein Compiler meldet.

    Mach das doch so:

    #include<iostream> //ohne .h
    #include<vector>
    
    int main()
    {
    std::vector<int> Ar1;
    std::vector<int> Ar2;
    
    //Ar1 füllen
    for(int i=0; i<Ar1.size(); ++i)
        Ar1.push_bak(i + 100);
    
    //nun kopieren, obwohl du auch gleich oben mit reinpacken kannst
    for(int i=0; i<Ar1.size(); ++i)
       Ar2[i] = Ar1[i];
    
    }
    

    Das ist natürlich ungetestet.

    chrische



  • Was soll den "iostream.h" sein!?
    Auch verwendest Du C++/CLI! Das hat mit C++ nichts zu tun und Du solltest es nicht durcheinander bringen!!!
    verwende entweder C++ *oder* C++/CLI. Aber bitte nicht beides. Als Anfänger bringt es einen nur durcheinander und erzeugt unnötigen Frust.

    Das reine C++ Beispiel wurde ja schon gepostet, das für C++/CLI sieht wie folgt aus:

    using namespace System;
    int main() 
    { 
      array<int> ^test = gcnew array<int>(20);
      for(int i=0; i<20; i++) 
        test[i]=(4468%(i+1))*4; 
      array<int> ^clone = (array<int>^) test->Clone(); 
      for(int i=0; i<20; i++) 
      { 
        Console::WriteLine("original: {0}", test[i]); 
        Console::WriteLine("clone:    {0}", clone[i]); 
      } 
      Threading::Thread::Sleep(20000);
    }
    


  • so und jetzt nochmal super einfach für jedermann ...

    hab jetzt lange rumgeforscht und einiges über pointer und speicheradressen gelernt.

    array kopieren sau einfach:

    int liste1[80];
    int liste2[80];
    
    memcpy(&liste2[0], &liste1[0], sizeof(int)*80);  // << sowas hab ich gesucht!!!! 
    // liste eins wird in liste zwei kopiert!  das wars schon!
    

    testprogramm von mir

    #include <windows.h>
    #include <stdio.h>
    #include <iostream.h>
    
    int main()
    {
    	int clone[20];
    	int test[20];
    	for(int z=0;  z<20;z++)
    	{
    		test[z]=3*z;
    	}
    
    	memcpy(&clone[0], &test[0], sizeof(int)*20);
    
            for(int x=0; x<20;x++)
    
    	{
    		printf("%d",x);
    		printf("original: %d \n",test[x]);
    		printf("clone:      %d\n \n",clone[x]);
    // ok die drei mal printf hätten nicht sein müssen, mir jetzt aber egal ^^ 
    	}
    
    	Sleep(50000);
    }
    

    so einfach geht das!

    aber danke für eure bemühungen!



  • Hallo

    Trotzdem der falsche Header und dein Compiler sollte dir dies auch melden, außer er ist auch noch aus der Computersteinzeit.

    chrische


Anmelden zum Antworten