Utworzenie wielowymiarowej tablicy na podstawie danych wejściowych

0

Witam,
Jakim sposobem można utworzyć tablicę n-wymiarową nie znając ilości wymiarów przy kompilacji programu, a dopiero w trakcie jego działania? pozdrawiam

0

Google.pl + tablice dynamiczne

0

możesz stworzyć tablicę jednowymiarową i udawać, że jest tablicą n-wymiarową:
zakładając, że Twoje kolejne wymiary to:
a1,a2,a3,...,an

można powiedzieć, że:
rozmiar tablicy jednowymiarowej powinien mieć rozmiar: a1a2...*an

komórka na pozycji x1,x2,x3,...,xn w tablicy wielowymiarowej, w Twojej tablicy jednowymiarowej będzie na pozycji:
x1 + x2a1 + x3a1a2 + x4a1a2a3 + ... + xna1a2a3...*a[n-1] (w nawiasie kwadratowym jest indeks)

Napisałem na szybko brzydki, ale chyba działający kod (jak się nigdzie nie walnęłem):

#include <vector>
#include <iostream>
#include <string>

using namespace std;

int main()
{
  int n;
  cout << "Podaj ilosc wymiarow tablicy: ";
  cin >> n;

  vector<int> wymiary(n);
  int ilosc_elementow = 1;

  cout << "Podaj po kolei wymiary tablicy:\n";
  for (int i=0; i<n; i++)
    {
      cin >> wymiary[i];
      ilosc_elementow *= wymiary[i];
    }

  vector<int> tablica(ilosc_elementow,0);

  int wybor;
  bool koniec;
  do
    {
      cout << "1 - wprowadanie nowych danych do tablicy\n";
      cout << "2 - wyswietlenie komorki\n";
      cout << "KAZDA INNA LICZBA - koniec\n";

      cin >> wybor;
      koniec =  !(wybor==1 || wybor==2);

      if (!koniec)
        {
          cout << "Podaj ktorej komorki dotyczy operacja:\n";
          int nr = 0;
          int przes = 1;
          for (int i=0; i<n; i++)
            {
              int a;
              cin >> a;
              nr += a*przes;
              przes *= wymiary[i];
            }
          int& komorka = tablica[nr];
          if (wybor==1)
            {
              cout << "Podaj liczbe ktora chcesz wpisac do wybranej komorki:\n";
              cin >> komorka;
            }
          else
            {
              cout << "Wybrana komorka przechowuje wartosc: " << komorka << "\n";
            }
        }
    }
  while (!koniec);

  return 0;
}

kod najlepiej by było wrzucić do jakiejś klasy i powinno być sprawdzane czy nie wychodzisz poza zakres któregoś wymiaru.

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