Bonjour,
J'essaye de comprendre le fonctionnement de cet exemple 3 :
https://learn.microsoft.com/fr-fr/cp...?view=msvc-170
dont le code est le suivant, je ne comprends pas très bien la partie que j'ai mis en gras/italique :
Premièrement, je ne comprends pas ce que sont les crochets vides devant le pointeur...ça laisserait penser qu'on veut convertir en tableau comportant des binaires pour valider ou non l'insertion dans v2 !? D'habitude pour un tableau les crochets sont après comme int [], on ne fait pas [] int !? A moins que ça soit une façon de faire du cast...? genre (int) a pour convertir a en int, ici on ferait [] a pour convertir en tableau !?
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 vector<shared_ptr<Song>> v { make_shared<Song>(L"Bob Dylan", L"The Times They Are A Changing"), make_shared<Song>(L"Aretha Franklin", L"Bridge Over Troubled Water"), make_shared<Song>(L"Thalía", L"Entre El Mar y Una Estrella") }; vector<shared_ptr<Song>> v2; remove_copy_if(v.begin(), v.end(), back_inserter(v2), [] (shared_ptr<Song> s) { return s->artist.compare(L"Bob Dylan") == 0; }); for (const auto& s : v2) { wcout << s->artist << L":" << s->title << endl; }
Et le return j'ai du mal à le comprendre dans ce contexte, je l'utilise dans des fonctions classiques, pas comme ça...
Par contre, je comprends très bien cet exemple :
C'est vraiment, le 4ème argument du 1er exemple qui me perturbe au niveau de la syntaxe... j'imagine dans le 4ème argument que ce qui est entre accolades sert à initialiser le tableau si mon hypothèse est bonne via le return en le remplissant de booleens...pas simple à comprendre cette écriture condensée...
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 #include <iostream> // std::cout #include <algorithm> // std::remove_copy_if #include <vector> // std::vector bool IsOdd (int i) { return ((i%2)==1); } int main () { int myints[] = {1,2,3,4,5,6,7,8,9}; std::vector<int> myvector (9); std::remove_copy_if (myints,myints+9,myvector.begin(),IsOdd); std::cout << "myvector contains:"; for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it) std::cout << ' ' << *it; std::cout << '\n'; return 0; }
Bon weekend.
Partager