Új hozzászólás Aktív témák
-
EQMontoya
veterán
válasz
HussarF #2759 üzenetére
Jól értem, hogy Te most a file közepébe szeretnél írni?
Ez nem fog menni sehogy, ne erőlködj.
Ha odaseek-elsz, akkor onnantól írsz a fileba, bármi is van utána.Az ilyen problémákat úgy szokták kezelni, hogy az összes adat, amit menteni akarsz, memóriában van, és mindig kiírod a teljes filet. A beleseekelés írt fileba csak nagyon speciális körülmények között értelmes dolog.
-
dabadab
titán
válasz
HussarF #2750 üzenetére
"De amit nem értek, hogy valahol mégis csak beolvassa így is a string-be"
Nem a stringbe, hanem egy random tárterületre, ugyanis a printf egy char *-ra számít, ehelyett megkapja a string értékét (nem magát a C-stílusú stringet, ami jelen esetben egyetlen nullla karakterből állna, mert üres, hanem kompletten a belső változók értékeit) és ezt értelmezi pointerként (printf szintén). Szóval valami tök random helyre írsz a memóriában és onnan is olvasol.
-
EQMontoya
veterán
válasz
HussarF #2748 üzenetére
Jujj, azért ez a pattintott C korszak.
Fscanf: char*-ba tudsz vele olvasni.
Ha stringbe szeretnél olvasni c++ módon, akkor valahogy így próbálkozz:int main () {
string line;
ifstream myfile ("example.txt");
if (myfile.is_open())
{
while ( getline (myfile,line) )
{
cout << line << '\n';
}
myfile.close();
}else cout << "Unable to open file";
return 0;
} -
dabadab
titán
válasz
HussarF #2622 üzenetére
"most már csak kb. másfélszer lassabb a függvényekbe szedett kód a spagettinél."
Akkor inline-old a függvényeket. Ahhoz az kell, hogy egy fordítási egységben legyenek, vagyis praktikusan a kis függvények vagy egy c++-ban legyenek azzal, ami meghívja őket (ez esetben inline-ként kell őket deklarálni), vagy benne legyen a függvény törzse is a header file-ban (ilyenkor meg automatikusan inline-olódik).
-
proof88
addikt
válasz
HussarF #2620 üzenetére
ebben az esetben, ne pointerként add át őket, hanem simán csak értékként (ezt az E1-re és az sz_E-re értem). Nem vesztesz sebességet. Pointereket akkor használj, ha tényleg tömbről van szó, és dinamikusan lefoglalt memóriaterületre mutat a mutatód. Ha esetleg kifelé is változtatni akarsz a beadott paramétereken, akkor inkább referenciaként add át, ne mutatóként. Érdemes ezt használni, ha már C++. C-ben nincs referencia.
-
proof88
addikt
válasz
HussarF #2617 üzenetére
nem, ilyenkor a vector-ok másolódnak, azaz új vector objektumok keletkeznek, az eredetik tartalmával, és a függvény a másolatokon fog dolgozni, nem az eredetiken. A vektorokat add át referenciaként, pl:
vector<double>& E_tarolo
vagy pl.:
vector<vector<double>>& hkmígy az eredeti, függvénynek megadott vektorokkal fog dolgozni a függvény, mert csak referenciát adsz át neki.
Ezzel máris megspórolsz egy csomó dinamikus memóriafoglalást, melyek eddig mindig megtörténtek bármelyik vector-os függvényed hívásakor (a komplett vektor lemásolása végett).Amúgy Debug vagy Release módban fordítasz? Utóbbiban gyorsabb lesz a futás, persze fejleszteni Debug-ban ajánlott, a jobb hibakeresés végett.
Igazából nem tudom, milyen célja van ezeknek a vektoroknak, ezek csak bemeneti paraméterek? Mert ha igen, és a függvény nem is módosít rajtuk, csak olvassa őket, akkor még a const-ot is odaírhatod eléjük, pl.:
void PhotoEffect(double *E1, int *sz_E, const vector<double>& E_tarolo)
Illetve ami még nem világos, hogy pl ennél a függvénynél az E1 ill. sz_E paraméterek valóban tömbökre mutatnak?
-
dabadab
titán
válasz
HussarF #2617 üzenetére
"Meg a vector-okat, de azok is pointerként működnek, mint a tömbök, nem? vagy legalábbis nem hiszem, hogy az okozná a problémát"
Pedig de. Az std:vector<> az ugy mukodik, hogy amikor lemasolod, akkor a komplett adatstrukturat lemasolja.
(A QT containere pl. nem igy mukodnek, azok copy-on-write-ot csinalnak, de ez most csak mellekszal.)vagyis neked a kovetkezo kell pl:
void PhotoEffect(double *E1, int *sz_E, const vector<double> &E_tarolo)
-
proof88
addikt
-
proof88
addikt
Új hozzászólás Aktív témák
Hirdetés
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Samsung Galaxy Tab A8 (2021) , 3/32 GB,
- Használt Intel procik - Core 2 - Dual Core
- HP 635 laptop eladó
- BESZÁMÍTÁS! ASUS Z390 i5 9500 16GB DDR4 512GB SSD RTX 2060 Super 8GB Rampage SHIVA Thermaltake 500W
- Lenovo ThinkCentre M720q/ Dell OptiPlex 3060- 3070/ Hp EliteDesk 800 mini, micro PC-Számla/garancia
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest