[AC++] Chapter 3: Problème de compréhension des vector
Bonjour à tous,
suite à de bonnes critiques sur AC++, je m'y met, avec mon anglais pas terrible, j'avance peut être un peu moins vite, mais ça va.
J'en suis au chapitre III, le chapitre ou ils introduisent la notion de vector. tout d'abord, voici le code fourni pour exemple (et expliqué) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| #include <iostream>
#include <iomanip>
#include <ios>
#include <string>
#include <vector>
#include <algorithm>
using std::cin;
using std::cout;
using std::endl;
using std::setprecision;
using std::string ;
using std::streamsize;
using std::vector;
using std::sort;
int main()
{
cout <<"Entre ton nom : ";
string name;
cin >> name;
cout << "Hello, " << name << "!" << endl;
cout << "entre ton midterm et final exam grades:";
double midterm, final;
cin >> midterm >> final ;
cout << "Enter all your homework grades, "
"followed by end of file" ;
vector<double> homework;
double x;
while (cin >> x) {
homework.push_back(x);
}
typedef vector<double>::size_type vec_sz;
vec_sz size = homework.size();
if (size == 0) {
cout << endl << "You must enter your grades. "
"Please try again" ;
return 1;
}
sort(homework.begin(), homework.end());
vec_sz mid = size / 2;
double median;
median = size % 2 == 0 ? (homework[mid] + homework[mid - 1]) / 2
: homework[mid];
streamsize prec = cout.precision();
cout << "Your final grades is " << setprecision(3)
<< 0.2 * midterm + 0.4 * final + 0.4 * median
<< setprecision(prec) << endl;
return 0;
} |
Voilà, alors tout d'abord, je récapitule ce que j'ai compris :
Un vector, sert à stocker des valeurs, un peu comme un tableau ?
Seulement voilà: quand on déclare un vector on fait comme suit :
Code:
vector<type>::nom_vector;
Quand on enregistre les valeurs dedans à l'aide d'une boucle, je ne comprend pas pourquoi dans le code en haut, on rajoute une partie :
Code:
1 2 3
| while (cin >> x) {
homework.push_back(x);
} |
Pourquoi ne pas faire :
Code:
1 2 3
| while (cin >> x) {
homework(x);
} |
?
push_back, signifie quelque chose de préderterminée, comme par exemple .size() ?( pour déterminer la taille d'un string ou vector...etc)
Si la réponse est négative,, alors on peut en créer autant qu'on en souhaite ? Mais quel interêt ?
Encore une petite incompréhension de cette partie de code :
Code:
1 2
| median = size % 2 == 0 ? (homework[mid] + homework[mid - 1]) / 2
: homework[mid]; |
J'ai bien compris la syntaxe de la structure conditionelle ! ( x == x ? y : z ;) c'est ce qui a à l'intérieur,
Code:
(homework[mid] + homework[mid - 1]) / 2
, a ma souvenance, mid, on l'a déclaré nul part :cry:, à quoi sert t'il ?, lorsqu'on prend un vector et qu'on ajoute un paramètre entre crochets, que signifie ça ?
Pour là, on ne prend pas le .push_back() au lieu de homework ?
Merci beaucoup, et désolé du gro pavé, j'espère avoir été assez claire !