J'ai écrit ce programme, qui trie quelques ints en utilisant un foncteur:Fonctor C++ - comportement inattendu?
#include<iostream>
#include<list>
#include<set>
using namespace std;
struct IntSorter
{
unsigned int comparisons;
IntSorter()
{
std::cout << "new intsorter" << std::endl;
comparisons = 0;
}
bool operator() (const int &a, const int &b)
{
std::cout << "c is " << comparisons << std::endl;
++comparisons;
std::cout << "c is now " << comparisons << std::endl;
return a<b;
}
};
int main(int argc, char *argv[])
{
list<int> my_list;
my_list.push_back(4);
my_list.push_back(3);
my_list.push_back(5);
my_list.push_back(1);
IntSorter s;
my_list.sort(s);
for (list<int>::iterator it=my_list.begin(); it!=my_list.end(); it++)
{
std::cout << *it << std::endl;
}
return 0;
}
Le tri fonctionne très bien, mais la partie comptant le nombre de comparaisons donne un résultat que je ne m'y attendais pas:
./prog -a -b -c -d
new intsorter
c is 0
c is now 1
c is 0
c is now 1
c is 0
c is now 1
c is 1
c is now 2
c is 2
c is now 3
1
3
4
5
Je pensais que la structure serait réutilisée, en comptant et en stockant le nombre de comparaisons. Cependant, il semble de le copier, ou un autre comportement que les numéros imprimés vont 1,1,1,2,3, au lieu de 1,2,3,4,5. Qu'est-ce que je fais mal?
Et pour le prouver, vous pouvez aussi la valeur de sortie de « ceci » dans l'opérateur() aussi bien. –
C'est un bon point. –