Naudojimo instrukcija: parsisiuntus failus įveskite "make" į komandinę eilutę, tada paleiskite exe failą. Sekite instrukcijas konsolėje.
įvedus "make test" bus sukurtas test.exe failas, jį paleidus galima patikrinti Rule of 5 metodus, implementuotus programoje.
įvedus "make clean" bus ištrinti visi exe failai.
įvedus "make cleanresult" bus ištrinti malaciai.txt ir vargsai.txt failai.
v1.5 atnaujinimai: sukurta abstrakti klasė Zmogus, klasė studentas yra išvesta iš Zmogus.
Sukurtas virtualus destruktorius Zmogus klasei, taip pati pridėta virtuali funkcija getVardas.
v1.2 atnaujinimai: šioje versijoje studentas struktūra pilnai pakeista į studentas klasę. Implementuota 5-ių taisyklė - sukurtas copy constructor, copy assignment operator, move constructor, move assignment operator, destruktorius. Programoje daug kur pakeistas kodas, dirbant su studentas objektais, naudojant OOP praktiką.
Funkcijoje "nuskaitymas" push_back metodas pakeistas į emplace_back metodą, taip sutaupau atminties.
Šioje versijoje panaudotas perkrautas << operatorius studentas klasei, eilutė std::cout << studentas konsolėje išves studento vardą, pavardę ir galutinį pažymį.
Programa dabar veikia sparčiau, ir užima mažiau atminties.
Testavimas atliktas naudojant vector konteinerį.
VECTOR | 100k | 1M | 10M |
---|---|---|---|
Nuskaitymas | 0.193s | 1.423s | 14.176s |
Rūšiavimas | 0.007s | 0.059s | 0.64s |
Vargsai išvedimas | 0.051s | 0.335s | 3.521s |
Malaciai išvedimas | 0.071s | 0.484s | 5.788s |
Viso | 0.326s | 2.307s | 24.152s |
v1.1 atnaujinimai: ankstesnėse versijose naudojau struct studentas, dabar naudoju class studentas. Programa veikia truputį sparčiau, bet nežymiai.
Naudojant vector:
100k | 1M | 10M | |
---|---|---|---|
struct | 0.51s | 4.89s | 32.57s |
class | 0.49s | 4.36s | 27.33s |
Optimizavimo flag'ų testavimas (10M):
laikas(s) | exe failo užimama vieta | |
---|---|---|
- | 29.8815 | 1059KB |
-O1 | 26.2167 | 1302KB |
-O2 | 25.8021 | 1343KB |
-O3 | 25.3347 | 1457KB |
v1.0 atnaujinimai: Skaidydamas studentai konteinerį į malaciai ir vargsai praeitose versijose sukurdavau du naujus konteinerius malaciai ir vargsai, kopijuodamas studento objektą į vieną arba kitą konteinerį, tokia programos realizacija yra neefektyvi atminties atžvilgiu. v1.0 versijoje studentai konteinerį skaidau naudodamas tik vieną naują konteinerį vargsai, perkeldamas studento objektą iš studentai į vargsai, tad konteineryje studentai lieka "malaciai". Sukurtas makefile, parašius komandinę eilutę "make", programa yra sukompiliuojama ir paruošiamas exe failas.
Mano kompiuterio specifikacijos : 16gb RAM, CPU - AMD Ryzen 5 4600H, GPU - Nvidia Geforce GTX 1650 TI
Programos veikimo principas:
Programa paklausia vartotojo, ar generuoti studentų failą, ar atlikti veiksmus su jau esamu failu. Jei pasirenkama generuoti failą, vartotojo klausiama, kiek studentų bus faile. Prieš atliekant veiksmus su failu, vartotojo klausiama, kurį konteinerį naudoti veiksmams su failu. (Vector, list, deque) Atliekami veiksmai su pasirinktu failu:
- Nuskaitomi duomenys, suskaičiuojami studentų galutiniai pažymiai
- Studentai išskaidomi į "malacius" ir "vargsus" naudojant studentai ir vargsai konteinerius: studentai konteineryje lieka studentai, kurių gal. pažymys >=5, o vargsai konteineryje atsiranda studentai, kurių gal. pažymys <5, jie ištrinami iš studentai konteinerio.
- Suformatuojami duomenys iš vargsai konteinerio, rezultatas išvedamas į "vargsai.txt"
- Suformatuojami duomenys iš studentai konteinerio, rezultatas išvedamas į "malaciai.txt"
Matome, kad atnaujintoje programos versijoje programa atlieka darbą truputį sparčiau, bet nedaug. Su 10m studentų programa veikia gal 5sec trumpiau nei praeitoje versijoje.
Naudojant vector:
VECTOR | 1k | 10k | 100k | 1M | 10M |
---|---|---|---|---|---|
Nuskaitymas | 0.004411 | 0.034408 | 0.290819 | 2.891 | 20.6048 |
Rūšiavimas | 0.000471 | 0.005166 | 0.037893 | 0.233474 | 1.62612 |
Vargsai išvedimas | 0.026193 | 0.054142 | 0.074769 | 0.718508 | 4.06602 |
Malaciai išvedimas | 0.002301 | 0.073061 | 0.104735 | 1.04496 | 6.24776 |
Viso | 0.03805 | 0.171577 | 0.51298 | 4.89566 | 32.5722 |
Generavimas | 0.001879 | 0.020029 | 0.17398 | 1.72649 | 12.9375 |
Naudojant list:
LIST | 1k | 10k | 100k | 1M | 10M |
---|---|---|---|---|---|
Nuskaitymas | 0.002255 | 0.020398 | 0.204996 | 1.76657 | 18.8843 |
Rūšiavimas | 0.000178 | 0.001654 | 0.019641 | 0.180727 | 0.30544 |
Vargsai išvedimas | 0.020804 | 0.004767 | 0.043911 | 0.450671 | 3.2987 |
Malaciai išvedimas | 0.033024 | 0.006826 | 0.063624 | 0.627831 | 4.66719 |
Viso | 0.03805 | 0.037109 | 0.33603 | 2.73121 | 27.981 |
Naudojant deque:
DEQUE | 1k | 10k | 100k | 1M | 10M |
---|---|---|---|---|---|
Nuskaitymas | 0.002619 | 0.019049 | 0.201048 | 1.94471 | 18.5413 |
Rūšiavimas | 0.000167 | 0.001469 | 0.015256 | 0.130697 | 0.49566 |
Vargsai išvedimas | 0.019543 | 0.00548 | 0.039213 | 0.439459 | 2.97396 |
Malaciai išvedimas | 0.028777 | 0.007408 | 0.056731 | 0.661483 | 4.49107 |
Viso | 0.054019 | 0.036882 | 0.316761 | 3.18256 | 26.532 |
v0.5 atnaujinimai: Dabar programa leidžia pasirinkti konteinerį, su kuriuo bus atliekami veiksmai - vector, list arba deque. Naudoju šablonines funkcijas, kurios veikia su bet kokiu naudojamu konteineriu.
Mano kompiuterio specifikacijos : 16gb RAM, CPU - AMD Ryzen 5 4600H, GPU - Nvidia Geforce GTX 1650 TI
Programos veikimo principas:
Programa paklausia vartotojo, ar generuoti studentų failą, ar atlikti veiksmus su jau esamu failu. Jei pasirenkama generuoti failą, vartotojo klausiama, kiek studentų bus faile. Prieš atliekant veiksmus su failu, vartotojo klausiama, kurį konteinerį naudoti veiksmams su failu. (Vector, list, deque) Atliekami veiksmai su pasirinktu failu:
- Nuskaitomi duomenys, suskaičiuojami studentų galutiniai pažymiai
- Studentai išrūšiuojami į du naujus konteinerius: malaciai, jei galutinis pažymis >=5, vargsai, jei pažymys <5
- Suformatuojami duomenys iš vargsai konteinerio, rezultatas išvedamas į "vargsai.txt"
- Suformatuojami duomenys iš malaciai konteinerio, rezultatas išvedamas į "malaciai.txt"
Matome, kad naudojant list arba deque vietoj vector, programos veikimo sparta beveik nesikeičia.
Naudojant list:
LIST | 1k | 10k | 100k | 1M | 10M |
---|---|---|---|---|---|
Nuskaitymas | 0.002255 | 0.020398 | 0.204996 | 1.76657 | 19.2724 |
Rūšiavimas | 0.000178 | 0.001654 | 0.019641 | 0.180727 | 1.84553 |
Vargsai išvedimas | 0.020804 | 0.004767 | 0.043911 | 0.450671 | 4.40405 |
Malaciai išvedimas | 0.033024 | 0.006826 | 0.063624 | 0.627831 | 6.41769 |
Viso | 0.03805 | 0.037109 | 0.33603 | 3.03121 | 31.981 |
Generavimas | 0.001879 | 0.020029 | 0.17398 | 1.72649 | 12.9375 |
Naudojant deque:
DEQUE | 1k | 10k | 100k | 1M | 10M |
---|---|---|---|---|---|
Nuskaitymas | 0.002619 | 0.019049 | 0.201048 | 1.94471 | 19.258 |
Rūšiavimas | 0.000167 | 0.001469 | 0.015256 | 0.130697 | 1.60812 |
Vargsai išvedimas | 0.019543 | 0.00548 | 0.039213 | 0.439459 | 4.32674 |
Malaciai išvedimas | 0.028777 | 0.007408 | 0.056731 | 0.661483 | 6.0704 |
Viso | 0.054019 | 0.036882 | 0.316761 | 3.18256 | 31.2998 |
Generavimas | 0.001879 | 0.020029 | 0.17398 | 1.72649 | 12.9375 |
v0.4 atnaujinimai: programa veikia zymiai sparciau nei v0.3, studentu vektoriu isrusiuoju naudodamas du naujus vektorius - malaciai ir vargsai. Visos programos laikas matuojamas atskirai nuo failo generavimo laiko. Mano kompiuterio specifikacijos : 16gb RAM, CPU - AMD Ryzen 5 4600H, GPU - Nvidia Geforce GTX 1650 TI
Programos veikimo principas:
Programa paklausia vartotojo, ar generuoti studentų failą, ar atlikti veiksmus su jau esamu failu. Jei pasirenkama generuoti failą, vartotojo klausiama, kiek studentų bus faile. Atliekami veiksmai su pasirinktu failu:
- Nuskaitomi duomenys, suskaičiuojami studentų galutiniai pažymiai
- Studentai išrūšiuojami į du naujus vektorius: malaciai, jei galutinis pažymis >=5, vargsai, jei pažymys <5
- Suformatuojami duomenys iš vargsai vektoriaus, rezultatas išvedamas į "vargsai.txt"
- Suformatuojami duomenys iš malaciai vektoriaus, rezultatas išvedamas į "malaciai.txt"
1k | 10k | 100k | 1M | 10M | |
---|---|---|---|---|---|
Nuskaitymas | 0.004411 | 0.034408 | 0.290819 | 2.891 | 20.6048 |
Rūšiavimas | 0.000471 | 0.005166 | 0.037893 | 0.233474 | 1.62612 |
Vargsai išvedimas | 0.026193 | 0.054142 | 0.074769 | 0.718508 | 4.06602 |
Malaciai išvedimas | 0.002301 | 0.073061 | 0.104735 | 1.04496 | 6.24776 |
Viso | 0.03805 | 0.171577 | 0.51298 | 4.89566 | 32.5722 |
Generavimas | 0.001879 | 0.020029 | 0.17398 | 1.72649 | 12.9375 |