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 :

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;
}
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 !?

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 :

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;
}
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...

Bon weekend.