Kopiowanie tablicy

0

Witam, mam za zadanie skopiować tablicę, jednakże mam problemy.. Napisałem kawałek kodu, co w nim trzeba zmienić żeby działało?

#include <iostream>

using namespace std;
int main(int argc, char *argv[]) {

    int tab[10]={0,1,2,3,4,5,6,7,8,9};  
    int *wsk;
    wsk=tab;

    for(int i=0; i<10; i++)
        cout<<"tabl["<<i<<"]="<<*(wsk++)<<endl;

    int tab1[10];
    int *wsk1;
    wsk1=tab1;

    for (int i=0; i<10; i++){   
        *(wsk1++) = *(wsk++);
    }

    cout<<"Tablica po skopiowaniu:";
    for( int i=0; i<10; i++)
        cout<<"tabl["<<i<<"]="<<*(wsk1++)<<endl;    

    return 0;
}
0

Po pętle:

    for(int i=0; i<10; i++)
            cout<<"tabl["<<i<<"]="<<*(wsk++)<<endl;

wsk już nie wskazuje na początek tablicy, więc następna pętla już nie działa poprawnie.

0
const unsigned size = 10;
int tab[size]={0,1,2,3,4,5,6,7,8,9};
int tab2[size];
std::copy(tab, tab + size, tab2); 
0

Ok, rzeczywiście. A da się to jakoś szybko zniwelować? Bo ja zrobiłem kolejny wskaźnik pokazujący na element zerowy tablicy "tab" i działa, ale myślę, że nie jest to optymalne rozwiązanie.. Moim zadanie jest stworzenie funkcji kopiującej, więc chyba chodzi też o to aby tych zmiennych za wiele nie było.

Póki co rozwiązanie bez funkcji.

#include <iostream>

using namespace std;
int main(int argc, char *argv[]) {

    int tab[10]={0,1,2,3,4,5,6,7,8,9};  
    int *wsk;
    wsk=tab;

    for(int i=0; i<10; i++)
        cout<<"tabl["<<i<<"]="<<*(wsk++)<<endl;

    int *wsk2;  
    wsk2=tab;

    int tab1[10];
    int *wsk1;
    wsk1=tab1;

    for (int i=0; i<10; i++){   
        *(wsk1++) = *(wsk2++);
    }

    cout<<"Tablica po skopiowaniu:"<<endl;
    for( int i=0; i<10; i++)
        cout<<"tabl["<<i<<"]="<<*(wsk2++)<<endl;    

    return 0;
}
0
  1. nie musisz robić kolejnego wskaźnika, wystarczy wsk=tab;
  2. ten sam problem występuje po drugiej pętli
  3. teraz trzecia pętla idzie po niewłaściwej tablice (poprzednio było prawie dobrze)
0

Dawno w c++ nie pisałem, ale takie coś powinno zadziałać.

#include <iostream>
#include <cstdlib>

using namespace std;

template <class typDanych>
void kopiujTablice(typDanych* tab1Oryginal, typDanych* tab2Kopia, int dlugoscTab)
{
    for (int i = 0 ; i < dlugoscTab ; i++){ 
         tab2Kopia[i] = tab1Oryginal[i];
    }
}

int main(int argc, char *argv[]) {

        int tab[10] = {0,1,2,3,4,5,6,7,8,9};
    int tab2[10];

    kopiujTablice(tab,tab2,10);

        cout<<"Tablica po skopiowaniu:"<<endl;

        for( int i=0; i<10; i++)
            cout<<"tabl["<<i<<"]="<< tab2[i] <<endl;        

    system("pause");
}
0

Nie wiem czy o to chodziło, ale działa.

#include <iostream>

using namespace std;
int main(int argc, char *argv[]) {

    int tab[10]={0,1,2,3,4,5,6,7,8,9};        
     int *wsk;
    wsk=&tab[0];

    for(int i=0; i<10; i++)
            cout<<"tabl["<<i<<"]="<<*(wsk++)<<endl;

        int tab1[10];
        int *wsk1;
        wsk1=tab1;

        for (int i=0 ; i<10; i++){                              
             *(wsk1++) = *(wsk++);
        }

        cout<<"Tablica po skopiowaniu:"<<endl;
        for( int i=0; i<10; i++)
            cout<<"tabl["<<i<<"]="<<*(wsk1)<<endl;        

        return 0;
}
0

W devc++ działa.. Nie chcę tak zrobić, ponieważ zapomniałem dodać, że mam to zrobić za pomocą wskaźników.

0
#include <iostream>

using namespace std;
int main(int argc, char *argv[]) {

    int tab[10]={0,1,2,3,4,5,6,7,8,9};        
     int *wsk;
    wsk=&tab[0];

    for(int i=0; i<10; i++)
            cout<<"tabl["<<i<<"]="<<*(wsk++)<<endl;

        int tab1[10];
        int *wsk1;
        wsk1=tab1;

    wsk = tab; //Musisz tutaj przypisac pamiec do poczatku tab!!
        for (int i=0 ; i<10; i++){                                                           
             *(wsk1++) = *(wsk++);
        }

    wsk1 = tab1;
        cout<<"Tablica po skopiowaniu:"<<endl;
        for( int i=0; i<10; i++)
            cout<<"tabl["<<i<<"]="<<*(wsk1++)<<endl;        

        system ("pause");
}
0

No to rób za pomocą wskaźników:

#include <iostream> 
using namespace std;

int main()
  {
   int tab[10]={0,1,2,3,4,5,6,7,8,9};
   for(int *w=tab;w<tab+10;++w) cout<<"tab["<<(w-tab)<<"]="<<*w<<endl;
   int tab1[10];
   for(int *s=tab,*d=tab1;s<tab+10;++s,++d) *d=*s;
   cout<<"Tablica po skopiowaniu:"<<endl;
   for(int *w=tab1;w<tab1+10;++w) cout<<"tab1["<<(w-tab)<<"]="<<*w<<endl;
   return 0;
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0