Zvetseni pole stuktur – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Zvetseni pole stuktur – C / C++ – Fórum – Programujte.comZvetseni pole stuktur – C / C++ – Fórum – Programujte.com

 

12. 12. 2013   #1
-
0
-

Ahoj, chtěl bych se zeptat zda a jak je možné změnit později na příkladu níže počet struktur clovek? Jde mi o to jak ho později zvětšit když dosáhnu maxima. Díky za pomoc.
 

struct lide

    {
        char jmeno[20];
        char prijmeni[20]
    }clovek[10];

Nahlásit jako SPAM
IP: 89.29.104.–
BigBear0
Stálý člen
12. 12. 2013   #2
-
0
-

Myslím, že pro tento účel je nejlepší použít std::vector 

#include <vector>
...

std::vector<lide> clovek;

// a pak kolikrat chces napr.
clovek.push_back(new clovek());

// ted muzes menit udaje
clovek[0].jmeno = "Petr";
clovek[0].prijmeni = "Pan";

// nebo
lide clovek2;
clovek2.jmeno = "Tomas";
clovek2.prijmeni = "Fuk";

clovek.push_back(clovek2);

Efektivnější je pak použití metody resize() např.: 

std::vector<lide> clovek(10);

// kdyz pak potrebujes vic mista, napises
clovek.resize(50);

a asi by nebylo od věci používat vektor ukazatelů na struktury, ale tím si nejsem úplně jistý. Případně koukni sem http://stackoverflow.com/questions/8067338/c-vector-of-structs-initialization nebo sem http://stackoverflow.com/questions/11457571/how-to-set-initial-size-of-stl-vector.

Pak je tu jeste metoda reserve(), která jen alokuje paměť, ale nezmění velikost vectoru, popsáno tu http://stackoverflow.com/questions/13029299/stdvectorresize-vs-stdvectorreserve.

Jestli nechceš, nebo nemůžeš použít vector, tak budeš muset používat malloc a delete, popsáno např. tady http://stackoverflow.com/questions/260915/how-can-i-create-a-dynamically-sized-array-of-structs.

Nejsem zrovna céčkař, tak kdyby to nebylo hned stopro správné či dokonce funkční, tak se omlouvám. Měj se.

Nahlásit jako SPAM
IP: 78.80.88.–
NECIN DRUHYM TO, CO NECHCES, ABY ONI CINILI TOBE!
KIIV
~ Moderátor
+43
God of flame
12. 12. 2013   #3
-
0
-

#2 BigBear
Todle ti fakt projde u  char jmeno[20], prijmeni[20] ???:

// ted muzes menit udaje
clovek[0].jmeno = "Petr";
clovek[0].prijmeni = "Pan";
Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
BigBear0
Stálý člen
12. 12. 2013   #4
-
0
-

Nj, nepozornost, děkuji za upozornění, viděl jsem jméno a příjmení, a automaticky jsem viděl string. Jde ale o princip změny počtu struktur, nikoliv o vnitřní strukturu struktury ;-), a to by snad mělo být tak, jak jsem psal. (navíc, jak jsem uvedl na konci, omlouvám se v případě, že kód není funkční, nezkoušel jsem jej, šlo o princip a odkazy s pomocí)

Nahlásit jako SPAM
IP: 78.80.88.–
NECIN DRUHYM TO, CO NECHCES, ABY ONI CINILI TOBE!
12. 12. 2013   #5
-
0
-

Díky moc za pomoc :)

Nahlásit jako SPAM
IP: 89.29.104.–
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, 39 hostů

Podobná vlákna

Metoda na zvetseni pole — založil Pavel

Zvetseni — založil Anonymní uživatel

Zvetseni formulare — založil werixon

Moderátoři diskuze

 

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