Dynamiczna alokacja tablic

Odpowiedz Nowy wątek
Gajw
2010-01-09 15:04
Gajw
0

Witam.
Chcę mieć tablice dwuwymiarową w której chcę przechowywac jakieś zmienne.
Nie wiem ile danych wprowadzi użytkownik.
Stąd moje pytanie.

Mamy przykładową pętle, która wykonuje się do napotkania EOF'u,powiedzmy

while(blalalala != EOF)
{
cin>>a;
cin>>b;

j++;
}

Nie wiem ile jest danych na wejściu.
Zmienna a to odpowiednio
a= tab[j][0];
b=tab[j][1];

W jaki sposób zadeklarowac taką tablicę?

Pozostało 580 znaków

2010-01-09 15:33
Moderator

Rejestracja: 16 lat temu

Ostatnio: 1 godzina temu

0

Widze ze to C++ wiec proponuje użyć <vector> To jest taka tablica która sama się powiększa w miare potrzeb. Tak samo jak z string, w którym nie wiesz ile znaków będzie przechowywal, ale sam się powieksza jak mu potrzeba.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

Fuv
2010-01-09 16:18
Fuv

Rejestracja: 10 lat temu

Ostatnio: 8 lat temu

0

Radzę skorzystać z STL'a, bo tworzenie dynamicznej tablicy wielowymiarowej jest trochę trudniejsze:

int main()
{
   int a=5,b=6; //masz jakies zmienne z wartosciami
   int **tablica;
   tablica = new int *[a];
   for(int i=0; i<10; i++)
           tablica[i] = new int [b];

   for(int i=0; i<10; i++)
           delete [] tablica[i];
   delete [] tablica;

   return 0;
} 

Pozostało 580 znaków

2010-01-09 16:27
Moderator

Rejestracja: 16 lat temu

Ostatnio: 1 godzina temu

0

@Fuv ale przecież autorowi nie chodzi o problematyczność tworzenia takich tablic, a o to że nie wie ile będzie danych ;)


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

Gajw
2010-01-10 01:31
Gajw
0

Mam problem z <vector>:

int main()
{
    vector < string > tablica(10);
    vector<string>::iterator wsk;
    vector<string>::iterator wsk2;
    wsk = tablica.begin();
    int i=0;
    while(i<12)
    {
        cin>>*wsk;
        wsk++;
        i++;
    }

    sortuj(tablica, tablica.size());

    wsk = tablica.begin();
    wsk2 = tablica.end();

    for (int a = 0; wsk != wsk2; ++wsk, ++a )
    {
        cout<<*wsk<<endl;
    }

}

Gdy wpiszę daną nr 11. program się zawiesza. Jak temu zapobiec, aby bez problemu wprowadzic n danych?

Pozostało 580 znaków

2010-01-10 01:42
Moderator

Rejestracja: 16 lat temu

Ostatnio: 1 godzina temu

0

Ja się nie dziwie że tak sie dzieje. MYŚL!
Jak w <vector> zaczyna brakowac pamięci to dokonuje on ponownej alokacji (na większą tablicę) i przepisuje tam stare wartości z reguły. A ty sobie trzymasz wskaźnik na to miejsce gdzie kiedyś owy wektor był i próbujesz na siłe po tej pamieci pisac...
Nie łatwiej używać operatora[]?
Zamiast tego twojego *wsk zrobić

cin>>tablica[i]

?


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

Gajw
2010-01-10 01:53
Gajw
0

to jest moja pierwsza styczność z vectorami. Więc przepraszam za głupie błędy :P

Problem rozwiązany poprzez zamianę pętli na:

while(cin>>y)
{

   tablica.push_back(y);
}

Pozostało 580 znaków

Odpowiedz

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