Dynamické pole v struktuře – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Dynamické pole v struktuře – C / C++ – Fórum – Programujte.comDynamické pole v struktuře – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
marpit0
Stálý člen
5. 3. 2013   #1
-
0
-

Zdravím,

uvažuji strukturu typu:

struct Zasobnik
{
        int *pole;
	int poradi;
};

a poté nastavení velikosti pole takto:

Zasobnik zasobnik;
zasobnik.pole = new int[M];

Syntakticky je to OK, ale spíš mě zajímá otázka, zda to má logiku, neboť mě samému to přijde jako docela prasárna. Zadání přímo ukládá použití struktur (bohužel ne tříd, kde bych velikost nastavil v konstruktoru) a jiné řešení mě nenapadá. 

Díky.

Nahlásit jako SPAM
IP: 78.102.62.–
MarPit
Reklama
Reklama
Řešení
crazy
~ Moderátor
+10
Grafoman
5. 3. 2013   #2
-
+1
-
Zajímavé
Vyřešeno Nejlepší odpověď

#1 marpit
není to prasárna... ale je dobré si do každé té struktury uchovávat počet prvků v tom poli, které si alokoval

Nahlásit jako SPAM
IP: 195.113.242.–
All you need is vision and time.
marpit0
Stálý člen
5. 3. 2013   #3
-
0
-

#2 crazy
díky

Nahlásit jako SPAM
IP: 78.102.62.–
MarPit
ingiraxo+15
Grafoman
5. 3. 2013   #4
-
0
-

ale počkat.. ty to děláš v C++ přece (soudim podle "new"), tak proč si tam nepřidáš konstruktor/destruktor jako u třídy?

v c++ je struktůra skoro stejná jako třída a narozdíl od čistýho C umí používat stejný věci jako třída 



struct Stack
{
    int* pole;
    int delka;

    Stack(int delka)
        : delka(delka)
        , pole(new int[delka])
    {}
    
    ~Stack()
    {
        delete[] pole;
        pole = 0;
    }
};
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
marpit0
Stálý člen
5. 3. 2013   #5
-
0
-

#4 ingiraxo
To by taky šlo, vlastně ona v C++ je struktura skoro jako třída, akorát bez metod. Pokud se ale nepletu, tak potom v konstruktoru je potřeba inicializovat veškeré "členské proměnné". 

Teoreticky vzato, to co jsem psal výše by šlo použít i v poli (pole struktur), s tím, že bych poté v cyklu každému poli v struktuře nastavil velikost. V případě toho konstruktoru si už nejsem jistý - u tříd musí být neparametrický konstruktor, takže předpokládám, že tomu bude i struktur. 

Nahlásit jako SPAM
IP: 78.102.62.–
MarPit
ingiraxo+15
Grafoman
5. 3. 2013   #6
-
0
-

#5 marpit
v c++ je struktůra naprosto stejná jako třída, jen má výchozí modifikátor public

instanční proměnny musíš nebo aspoň je dobrý je initializovat (hlavně pointry) a co se týče konstruktoru, tak není problém si doplnit bez parametrů a použití máš stejný jako si napsal výše 

priklad..

struct Stack
{
    int* pole;
    int delka;

    Stack() : pole(0), delka(0) { }
    Stack(int delka) { nastav(delka); }
    ~Stack() { delete[] pole; pole = 0; }

    void nastav(int delkaPole)
    {
        if (pole) delete[] pole;
        pole = new int[delkaPole];
        delka = delkaPole;
    }
};

int main()
{
    // pres konstruktor
    Stack stack(10);

    // pres promenny (rucne)
    Stack stack;
    stack.pole = new int[10];
    stack.delka = 10;

    // pres funkci
    Stack stack;
    stack.nastav(10);

    return 0;
}
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 72 hostů

Podobná vlákna

Dynamicke pole — založil george6565

Ne/dynamicke pole — založil cecilconrad

Dynamicke pole — založil Earl Cash

Dynamicke 2rozmerne pole — založil light_c_programator

Dynamicke pole - vypis — založil Dutch77

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý