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