Zadanie:
Piszemy klasę do przechowywania nieskończonej ilości liczb typu double. Zauważmy, że zwykła tablica, statyczna bądź dynamiczna, zawsze ma ograniczoną ilość elementów. Jednym z rozwiązań pozwalających na obejście tego problemu jest tzw. “wektor”. Wektor jest strukturą danych zawierającą dynamicznie tworzoną tablicę, która działa w ten sposób, że w momencie gdy wstawiany jest ostatni element tablicy, jej rozmiar zwiększa się dwukrotnie. Przykład: 1) Tworzymy nowy obiekt typu wektor → mamy tablicę jednoelementową: [0] 2) Dodajemy liczbę na jedno jedyne miejsce [0] → tablica jest 2x rozszerzana: [0][1] 3) Dodajemy liczbę na miejsce [1] → tablica jest 2x rozszerzana: [0][1][2][3] 4) Dodajemy liczbę na miejsce [2] → nie ma potrzeby rozszerzania: [0][1][2][3] 5) Dodajemy liczbę na miejsce [3] → znowu rozszerzamy 2x: [0][1][2][3][4][5][6][7] 6) Dodajemy liczbę na miejsce [4] → nie ma potrzeby rozszerzania: [0][1][2][3][4][5][6][7] 7) Dodajemy liczbę na miejsce [6] → nie ma potrzeby rozszerzania: [0][1][2][3][4][5][6][7] Itp.
main.cpp
#include "plik.h"
using namespace std;
int main()
{
Wektor wk;
int a, b = 0;
while (cin >> a)
{
setT(wk, a, b);
b++;
if (b == wk.getS())
wk.ro();
}
wypisz(wk);
system("PAUSE");
}
klasa.h
#include <iostream>
#include <fstream>
using namespace std;
class Wektor
{
int *tab;
int s;
public:
Wektor() { s = 1; tab = new int[s]; }
Wektor(int a) { tab = new int[a]; s = a; }
~Wektor() { delete[] tab; }
int getS() { return s; }
void ro();
friend void setT(Wektor& w, int a, int n);
friend void wypisz(Wektor& w);
};
klasa.cpp
#include "plik.h"
using namespace std;
void Wektor::ro()
{
delete[] tab;
s *= 2;
tab = new int[s];
}
void wypisz(Wektor& w)
{
for (int i = 0; i < w.getS(); i++)
cout << w.tab[i] << endl;
}
void setT(Wektor& w, int a, int n)
{
w.tab[n] = a;
}
Pytanie:
Wiem, że muszę stworzyć tymczasową tablicę na przechowanie danych i potem uzupełnić ją nowo stworzoną tablicę obiektu poszerzoną dwa razy. W jaki sposób mógłbym to wykonać?