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