Harjutusülesanded
1. Andmekogumid hulkadena
Koosta järgmised mallifunktsioonid andmekogumitega opereerimiseks. Funktsioonid peavad töötama andmekogumite vector
, list
ja deque
korral. Vajadusel teha funktsioone juurde.
NB! Mitte kasutada päist <set>
!
- hulkade ühisosa
template <typename T1, typename T2, typename T3> void yhisosa(T1& esimene, T2& teine, T3& kolmas) |
- hulkade ühend
template <typename T1, typename T2, typename T3> void yhend(T1& esimene, T2& teine, T3& kolmas) |
- hulkade vahe
template <typename T1, typename T2, typename T3> void vahe(T1& esimene, T2& teine, T3& kolmas) |
Näited funktsioonide rakendamisest andmekogumitel
|
|
2. Funktsioonide tööaja võrdlemine
Koosta järgmised mallifunktsioonid suurte andmekogumite töö võrdlemiseks. Kõik andmekogumid hoiavad täisarve.
- andmekogumi täitmine
template <typename T> void täida(T& andmed, int n); |
Funktsioon peab täitma etteantud andmekogumi (vector
, deque
või list
) järjestikuste täisarvudega (alates nullist). Funktsioon peab töötama kolme nimetatud andmekogumi korral.
- Summa leidmine
1. Summa leidmine indeksi abil, kus elemendid saadakse kätte operaatori []
abil.
template <typename T> int summa1(T& andmed); |
Funktsioon peab töötama vector
ja deque
korral.
2. Summa leidmine iteraatori abil. Andmekogum läbitakse iteraatori abil.
template <typename T> int summa2(T& andmed); |
Funktsioon peab töötama vector
, deque
ja list
korral.
Võrrelge summa leidmise aega mõlema funktsiooni abil ja erinevate andmekogumite korral. Valige sobiv elementide arv (> 1e5).
Aja mõõtmiseks saab kasutada päises <chrono>
olevat funktsiooni now()
, mis annab hetke aja:
auto algus = chrono::high_resolution_clock::now(); auto lõpp = chrono::high_resolution_clock::now(); auto aeg = chrono::duration_cast<std::chrono::nanoseconds>(lõpp - algus); |
Tuleb silmas pidada, et tulemus on nanosekundites, st on mõistlik teisendada sekunditeks. Põhjendage saadud tulemusi.