(K) Tyypin päättely (auto)

Edellisellä kierroksella (kohdassa 4.1) kerrottiin, miten 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ä. Tarkastellaan seuraavaa koodia, jossa on tarkoituksella käytettyä huonoa nimeämistä:

/*  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.