(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 */ }