Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Recherche d'élement dans un vector avec std::find_if

14 réponses
Avatar
philippe.lrx
Bonjour,

Dans le code ci dessous, le second appel =E0 std::find_if me donne le
message d'erreur :
test.cpp: In function =91int main()=92:
test.cpp:36: erreur: no matching function for call to =91find_if
(__gnu_cxx::__normal_iterator<const Foo*, std::vector<Foo,
std::allocator<Foo> > >, __gnu_cxx::__normal_iterator<Foo*,
std::vector<Foo, std::allocator<Foo> > >, Functor)=92

Je ne comprends absolument pas le sens de l'erreur, qui peut
m'expliquer ?

Le code :
#include <iostream>
#include <vector>
#include <algorithm>

struct Foo
{
Foo( std::string n )
: n_( n )
{}

std::string n_;
};

typedef std::vector<Foo> FooVector;

struct Functor
{
bool operator()( Foo const& f ) const
{
return f.n_ =3D=3D "toto";
}
};

int main()
{
FooVector fv;
fv.push_back( Foo( "tutu" ) );
fv.push_back( Foo( "toto" ) );
fv.push_back( Foo( "tata" ) );
fv.push_back( Foo( "toto" ) );
FooVector::const_iterator itFind =3D
std::find_if( fv.begin(), fv.end(), Functor() );
while ( itFind !=3D fv.end() )
{
std::cout << "trouv=E9\n";
itFind =3D std::find_if( itFind + 1, fv.end(), Functor() );
}

return 0;
}

Merci.

4 réponses

1 2
Avatar
Fabien LE LEZ
On Wed, 25 Mar 2009 01:26:20 -0700 (PDT), James Kanze
:

Sauf que ta fonction risque de donner un mauvais résultat si tu
l'appelles avec des long.



Logiquement, sur les systèmes sur lesquels "long" est plus grand que
"int" (ça existe ?), je devrais avoir un warning à la compilation,
non ?
Avatar
Jean-Marc Bourguet
Fabien LE LEZ writes:

On Wed, 25 Mar 2009 01:26:20 -0700 (PDT), James Kanze
:

>Sauf que ta fonction risque de donner un mauvais résultat si tu
>l'appelles avec des long.

Logiquement, sur les systèmes sur lesquels "long" est plus grand que
"int" (ça existe ?),



Tous les Unix en mode 64 bits par exemple.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Avatar
Fabien LE LEZ
On 25 Mar 2009 16:09:49 +0100, Jean-Marc Bourguet :

Tous les Unix en mode 64 bits par exemple.



Oups... Effectivement. Je n'avais même pas fait attention :-/
Avatar
James Kanze
On Mar 25, 3:57 pm, Fabien LE LEZ wrote:
On Wed, 25 Mar 2009 01:26:20 -0700 (PDT), James Kanze
:



>Sauf que ta fonction risque de donner un mauvais résultat si
>tu l'appelles avec des long.



Logiquement, sur les systèmes sur lesquels "long" est plus
grand que "int" (ça existe ?), je devrais avoir un warning à
la compilation, non ?



Long est plus grand que int sur prèsque tous les systèmes que je
connais. Et je ne sais pas en ce qui concerne un warning---dans
la pratique, il y a tellement de cas où on est amené à affecter
ou à initialiser une variable avec une expression d'un type plus
grand, on risquera d'être inondé de warnings. (Il me semble qu'à
un époque, VC++ avait de tel warnings. Et qu'il générait un
warning pour des choses comme:
short i = 0 ;
i = i + 1 ;
.)

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
1 2