Niveau initié
1. Quelle est la différence entre la ligne A et la ligne B ?
// Example 1: [] vs. at() // void f( vector<int>& v ) { v[0]; // A v.at(0); // B }
Niveau gourou
2. Examinez le code suivant:
// Example 2: Some fun with vectors // vector<int> v; v.reserve( 2 ); assert( v.capacity() == 2 ); v[0] = 1; v[1] = 2; for( vector<int>::iterator i = v.begin(); i < v.end(); i++ ) { cout << *i << endl; } cout << v[0]; v.reserve( 100 ); assert( v.capacity() == 100 ); cout << v[0]; v[2] = 3; v[3] = 4; // ... v[99] = 100; for( vector<int>::iterator i = v.begin(); i < v.end(); i++ ) { cout << *i << endl; }
Trouvez les erreurs d'implémentation et les erreurs de modélisation, ainsi que les problèmes de performance. En question annexe : qu'est-ce que le programme va afficher sur sa sortie standard ?
Et tant qu'à faire, autant mettre les citations correctement : le texte ci dessus est l'oeuvre de Herb Sutter, les quelques lignes d'énoncés modestement traduites par moi....sans permission je dois l'avouer.
[
remarque: je choisis ceux que je poste comme ça :
1) j'ai planché dessus assez longtemps (presque tous en fait, le gars qui fait ces articles c'est un bon, il donne pas mal de fil à retordre)
2) faut pas que ça prenne 20 pages
3) faut pas que l'explication soit longue
4) dans la mesure du possible, faut que ça reste proche de ce qu'on peut croiser tous les jours, genre là le std::vector, et le précédent, les fautes de frappe vicieuses.
]