tablica wskaźników na jednowymiarowe tablice

0

Hej, przypisuję pusty wskaźnik do każdego elementu tablicy:

#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
using namespace std;

class Person
{
public:
    Person()
    {
    }
};

class Table
{
public:

    int count;
    int size;

    Table(int s)
    {
        count = 0;
        size = s;
        Person** arr = new Person * [size];

            for (int i = 0; i < size; i++)
            {
                arr[i] = nullptr;
            }
}

};

int main()
{
    Table t(2);

    return 0;
}

ale zamiast tego chciałbym utworzyć tablicę wskaźników, wskazujących jednowymiarowe tablice czyli coś w stylu:

  1. alokuję tablicę wskaźników liczącą 'w' elementów:
    int **tab = new int *[w];
  2. następnie w pętli alokuję 'w' tablic int po 'k' elementów każda i przypisuję ich adresy elementom tablicy tab:
    for ( int i = 0; i < w; ++i ) tab[i] = new int [k];

To czy takie rozwiązanie jest w ogóle akceptowalne w przypadku zmiennych obiektowych klasy?

   Table(int s)
    {
        count = 0;
        size = s;
        int k = 2;
        Person** arr = new Person * [size];
         
            for (int i = 0; i < size; i++)
            {
                arr[i] = new Person[k * (i + 1)]; //specjalnie tak dałem żeby tablice miały różne rozmiary, Czyli miałbym [0,0][0,1]
                                                                                                                          [1,0][1,1]
                                                                                                                          [2,0][2,1]
                                                                                                                               [3,1]
                                                                                                                        
                                                                                                      
            }
}
};

1

To czy takie rozwiązanie jest w ogóle akceptowalne w przypadku zmiennych obiektowych klasy?

Tak. Obydwa Twoje przykłady, z punktu drugiego jak i drugiego snipetu, są poprawne. Poprawny nie jest Twój komentarz zawartością Person, a konkretnie pierwsza tablica. Jej rozmiar to 2 * (0 + 1) == 2 a nie 3.

3

Ja bym powiedział tak, to ma sens dla kodu napisanego w latach 1990tych.
Wiele książek, kopiuje wzorce nauczania ze starszych książek, więc ten wzorzec nadal powszechnie występuje w kiepskich książkach.

Zaoszczędziłbyś sobie wiele czasu, przez używanie std::vector

using PersonMatrix = std::vector<std::vector<Person>>;
.....
int k = 2;
PersonMatrix arr{size};

int i = 1;
for (auto& row : arr) {
    row.resize(k * i);
    ++i;
}

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