Dynamiczna alokacja tablic

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ę?

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.

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;
} 
0

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

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?

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]

?

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);
}

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