Bonjour,
En lisant l'article sur Boost.Array, je suis tombé sur une syntaxe que je ne comprends pas:
J'ai deux questions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 struct Init { int i; Init() : i(0) { } int operator() (int) { return i++; } }; struct TwoTimes { int operator() (int i) { return i*2; } }; int main() { boost::array<int,10> my_array; transform(my_array.begin(), my_array.end(), my_array.begin(), Init()); copy(my_array.begin(),my_array.end(),ostream_iterator<int>(cout," ")); cout << endl; transform(my_array.begin(), my_array.end(), my_array.begin(), TwoTimes()); copy(my_array.begin(),my_array.end(),ostream_iterator<int>(cout," ")); return 0; }
- Comment fonctionne le premier struct ?
- De l'appel eu 2ème transform, j'en déduis que TwoTimes est appelé pour chaque élément de my_array. Cela devrait être la même chose pour le premier appel à transform. Et pourtant, Init déclare i comme paramètre alors que TwoTimes ne le fait pas. Et pourtant les deux modifient la valeur de my_array qui leur est passée en "paramètre". Pourquoi ?
Merci par avance pour votre aide
Partager