Alokace paměti pomocí new a delete – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Alokace paměti pomocí new a delete – C / C++ – Fórum – Programujte.comAlokace paměti pomocí new a delete – C / C++ – Fórum – Programujte.com

 

Martin
~ Anonymní uživatel
1602 příspěvků
29. 11. 2013   #1
-
0
-

Ahojte. Trošku jsem zmatený jak alokovat nový paměťový prostor. V mém příkladu jde o načítání ze souboru. V základu mám pole o velikosti 10, pokud ale tohle pole vyčerpám, chtěl bych ho například zvýšit o dalších 10 prvků a tak dále až se nenačte celý soubor.  

#include <iostream>
#include <fstream>
#include <string.h>
#include <stdlib.h>
#include <new>

using namespace std;

typedef struct shop {
    long int id;
    string nazev;
    string popis;
    long int cena;
    long int pocet_kusu;
}shop;

int main()
{
    int velikost_pole = 0;
    int i = 0;
    shop shop[10];
    string proud;

    string file_in = "vstup"
    string pripona = ".csv";
    file_in = file_in + pripona;

    // Načtení ze souboru
    ifstream vstup_soubor;
    vstup_soubor.open(file_in.c_str(), ios::in);

    while(!vstup_soubor.eof())
    {

        getline(vstup_soubor, proud,';');

        if(proud.length() == 0) break;

        shop[i].id = atoi(proud.c_str());
        getline(vstup_soubor, proud,';');
        shop[i].nazev = proud;
        getline(vstup_soubor, proud,';');
        shop[i].popis = proud;
        getline(vstup_soubor, proud,';');
        shop[i].cena = atoi(proud.c_str());
        getline(vstup_soubor, proud,'\n');
        shop[i].pocet_kusu = atoi(proud.c_str());

        proud = "";
        i++;
        velikost_pole++;
    }
    vstup_soubor.close();

}


Pokud mi někdo poradí jak to přesně v tom cyklu udělat budu rád. Pokud mi to někde napíše přesně budu ještě raději, protože jsem vyzkoušel několik variant a prostě to nechápu a padá mi to pořád. Díky.

Nahlásit jako SPAM
IP: 46.13.181.–
29. 11. 2013   #2
-
0
-

Na konverzi na číslo by bylo lepší http://www.cplusplus.com/reference/string/stoi/ pokud máš překladač který podporuje C++11.

Místo pole bych použil vektor http://www.cplusplus.com/reference/vector/vector/, ten se sám realokuje. Pokud chceš sám "tvořit", potřebuješ evidovat kolik máš alokovaný a kolik máš obsazený. Zvětšení pole pak uděláš tak, že alokuješ nové (větší) pole a staré do něj zkopíruješ.

hu

Nahlásit jako SPAM
IP: 188.95.60.–
Martin
~ Anonymní uživatel
1602 příspěvků
29. 11. 2013   #3
-
0
-

Tak jsme to vykutil přes ty vektory, funguje to v podstatě jak má, jen by mě zajímalo jak předat vektor funkci, př:

mám definovaná vektor:

 vector<shop> tempshop(velikost_pole);

chtěl bych mít funkci pro výpis.

Ta funkce by vypisovala načtené hodnoty ze souboru, normálně to jde ale nejde mi to předat funkci, nejde mi předat jen ten vektor.

Funkce:  

//první proměnná funkce: shop tempshop[] je asi špatně na 99% :D
void vypis(shop tempshop[], int velikost_pole)
{
    for(int i=0; i<velikost_pole; i++)
    {
        cout << tempshop[i].id << " " << tempshop[i].nazev << " " << tempshop[i].popis << " " << tempshop[i].cena << " " << tempshop[i].pocet_kusu << endl;
    }
}

//volání funkce:
// vypis(parametr vektoru, velikost_pole);


Díky za nápady ;)

Nahlásit jako SPAM
IP: 46.13.181.–
z
~ Anonymní uživatel
268 příspěvků
30. 11. 2013   #4
-
0
-

   

void vypis(const vector<shop> & tempshop)
Nahlásit jako SPAM
IP: 88.101.8.–
Martin
~ Anonymní uživatel
1602 příspěvků
30. 11. 2013   #5
-
0
-

#4 z
Super díky!

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

Podobná vlákna

Dynamická alokace paměti — založil birkof

Alokace paměti polí — založil Lenka S.

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ý