(M) Tyypin päättely (auto)

Aikaisemmin mainittiin, että ohjelmoija voi jättää muuttujan tyypin kääntäjän pääteltäviksi avainsanalla auto. Tällainen tyypin päättely on helppoa koodin kirjoittajalle, mutta joissakin tilanteissa (varsinkin säiliöiden yhteydessä) lukijan olisi helpompi ymmärtää koodia, jos tarkka tyyppinimi olisi näkyvissä.

Tässä tehtävässä harjoitellaan auto-sanan korvaamista oikealla tyyppinimellä. Alla olevassa koodissa on tarkoituksella käytetty huonoa nimeämistä (esim. var1, var2 jne.), jotta päättelyä ei voisi tehdä käytettyjen nimien perusteella. Tutki koodia ja mieti, mikä tyyppi sopisi auto-sana tilalle.

/*  1 */ #include <iostream>
/*  2 */ #include <map>
/*  3 */ #include <vector>
/*  4 */ #include <set>
/*  5 */
/*  6 */ using namespace std;
/*  7 */
/*  8 */ using MapType = map<string, map<string, vector<int>>>;
/*  9 */ using VectorType = vector<map<string, set<int>>>;
/* 10 */
/* 11 */ int main()
/* 12 */ {
/* 13 */     MapType myMap;
/* 14 */     for(auto var1 : myMap)
/* 15 */     {
/* 16 */         for(auto var2 : var1.second)
/* 17 */         {
/* 18 */             for(auto var3 : var2.second)
/* 19 */             {
/* 20 */                 cout << var3 << endl;
/* 21 */             }
/* 22 */         }
/* 23 */     }
/* 24 */
/* 25 */     VectorType myVector;
/* 26 */     for(auto var1 : myVector)
/* 27 */     {
/* 28 */         for(auto var2 : var1)
/* 29 */         {
/* 30 */             for(auto var3 : var2.second)
/* 31 */             {
/* 32 */                 cout << var3 << endl;
/* 33 */             }
/* 34 */         }
/* 35 */     }
/* 36 */
/* 37 */     return 0;
/* 38 */ }

Rivillä 14 auto-sanan tilalla voisi lukea

Rivillä 16 auto-sanan tilalla voisi lukea

Rivillä 18 auto-sanan tilalla voisi lukea

Rivillä 26 auto-sanan tilalla voisi lukea

Rivillä 28 auto-sanan tilalla voisi lukea

Rivillä 30 auto-sanan tilalla voisi lukea

Riveillä 14 ja 26 esitellään muuttuja nimeltä var1.

Tarkastellaan riviä 16.

Tarkastellaan riviä 18.

Tarkastellaan riviä 28.