Jak utworzyć tablicę niesymetryczną bez new.

0

Czy jest możliwość utworzenia tablicy niesymetrycznej bez dynamicznej alokacji pamięci?

1

Co to jest tablica niesymetryczna?

0

Nieregularna w sensie że ma np 5 kolumn a każda kolumna inną liczbę wierszy.

3

Nie bardzo, ale zamiast new i tak używaj wektor, choć w tym przypadku to efektywnie to samo.

0

A jeśli bym utworzył kilka tablic jednowymiarowych z różną ilością elementów i je wyświetlił to chyba będzie przypominać tablicę dwuwymiarową ?

2

Jeśli Cię to zadowala… Pilnowanie tego, ile masz tych tablic i jak długa jest każda z nich będzie jednak błędogenne w bardziej skomplikowanych programach.

0

Chyba mogę użyć jeszcze funkcji malloc.

5
Render125 napisał(a):

Chyba mogę użyć jeszcze funkcji malloc.

NIE

Dokładniejsze wytłumaczenie: możesz, ale nigdy nie powinieneś.

6

A, czyli lubisz życie na krawędzi…

(już newdelete to proszenie się o błędy, a mallocfree to już niemal ofiara całopalna w intencji tychże błędów…)

3

Z tablicami sprawa ma się w taki sposób, że musisz znać całkowity rozmiar z góry żeby je stworzyć na stosie, bez używania new. Innej drogi nie ma.
Zakładając, że wiesz ile te tablice razem do kupy zajmują możesz stworzyć jedną dużą, zawierającą w sobie pozostałe, a kwestie długości poszczególnych podtablic załatwić wskaźnikami i strukturą przechowującą adres i długość:

int containerArray[50];
struct Subarray
{
   int *arrayBegin;
   size_t size;   
}

Subarray sub1;
sub1.arrayBegin = containerArray;
sub1.size = 5;

Subarray sub2;
sub2.arrayBegin = containterArray + sub1.size;
sub2.size = 15;

Subarray sub3;
sub3.arrayBegin = containerArray + sub1.size + sub2.size;
sub3.size = 30;

ale od razu mówię, że to strasznie kalekie rozwiązanie. Czemu nie możesz jak Swaróg przykazał posłużyć się wektorem, ewentualnie listą?

3
auto irregularMatrix = std::vector<std::vector<int>> {
    { 0 },
    { 1, 2 },
    { 6, 5, 9, 1, 2 },
    { 0 },
    { 1, 2 },
};

Radziłbym jednak dokładniej opisać twoje wymagania. Na razie rzuciłeś parę haseł i zgadujemy o co dokładnie ci chodzi.

0

No to zgadujemy dalej:

#include <iostream>

int main(){
    const char * tab[5] = {
        "Pierwszy napis",
        "Drugi napis",
        "Trzeci napis",
        "Czwarty napis",
        "Piaty napis"
    };
    
    for(int i = 0; i < 5; i++){
        std::cout << tab[i] << std::endl;
    }
    
 return 0;   
}
1
Render125 napisał(a):

Czy jest możliwość utworzenia tablicy niesymetrycznej bez dynamicznej alokacji pamięci?

Użyj wektorów -- będziesz miał co prawda dynamiczną alokację pamięci, ale ładnie schowaną.

std::vector<std::vector<int>> tab(5);
tab[0].resize(3);
tab[1].resize(31);
tab[2].resize(13);
tab[3].resize(7);
tab[4].resize(1);

tab[1][15] = -99;
tab[4][0] = 78;
// itd.

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