OVH Cloud OVH Cloud

std::between??

16 réponses
Avatar
Michaël Delva
Salut à tous,

par curiosité, existe-il une fonction between dans la STL? J'ai vu min et
max, mais pas ce type de fonction...

Ce n'est pas que ce soit difficile à coder, mais c'était pour savoir...

Merci!

10 réponses

1 2
Avatar
Fabien LE LEZ
On 30 Jul 2004 11:27:06 GMT, "Michaël Delva"
:

par curiosité, existe-il une fonction between dans la STL?


Que ferait-elle ?


--
;-)

Avatar
Gabriel Dos Reis
"Michaël Delva" writes:

| Salut à tous,
|
| par curiosité, existe-il une fonction between dans la STL? J'ai vu min et
| max, mais pas ce type de fonction...

Il y a beaucoup de place « between » entre « min » et « max ».

-- Gaby
Avatar
James Kanze
Gabriel Dos Reis writes:

|> "Michaël Delva" writes:

|> | par curiosité, existe-il une fonction between dans la STL? J'ai vu
|> | min et max, mais pas ce type de fonction...

|> Il y a beaucoup de place « between » entre « min » et « max ».

Beaucoup, ou pas assez:-). Que doit donner : between( 1, 2 ) ?

--
James Kanze
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
Avatar
Fabien LE LEZ
On 03 Aug 2004 14:14:16 +0200, James Kanze :

Que doit donner : between( 1, 2 ) ?


1.5 ?

]1;2[ ?

double(rand())/RAND_MAX + 1 ?


--
;-)

Avatar
James Kanze
Fabien LE LEZ writes:

|> On 03 Aug 2004 14:14:16 +0200, James Kanze :

|> >Que doit donner : between( 1, 2 ) ?

|> 1.5 ?

Sur un int ?

--
James Kanze
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
Avatar
drkm
James Kanze writes:

Fabien LE LEZ writes:

|> On 03 Aug 2004 14:14:16 +0200, James Kanze :

|> >Que doit donner : between( 1, 2 ) ?

|> 1.5 ?

Sur un int ?


Le PO n'a pas précisé la sémantique qu'il voulait attribuer à la
fonction ... Personnellement, je pensais plus à une sorte de
prédicat, style :

assert( between( 2 , 1 , 3 ) ) ;
assert( ! between( 0 , 1 , 3 ) ) ;

--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html

Avatar
Jeremie Fouche
drkm a écrit dans le message :

James Kanze writes:

Fabien LE LEZ writes:

|> On 03 Aug 2004 14:14:16 +0200, James Kanze :

|> >Que doit donner : between( 1, 2 ) ?

|> 1.5 ?

Sur un int ?


Le PO n'a pas précisé la sémantique qu'il voulait attribuer à la
fonction ... Personnellement, je pensais plus à une sorte de
prédicat, style :

assert( between( 2 , 1 , 3 ) ) ;
assert( ! between( 0 , 1 , 3 ) ) ;


oui, il me semble aussi, mais j'aurais plutot appelé ça:
bool in_range(int value, int min, int max);
voire même en fonction template.

--
Jérémie


Avatar
Fabien LE LEZ
On Tue, 3 Aug 2004 15:47:10 +0200, "Jeremie Fouche"
:

bool in_range(int value, int min, int max);


Mais quand on lit le code, il faut se reporter à la documentation de
la fonction pour savoir dans quel ordre sont les arguments.

Je préfère nettement une classe

template <class Borne> class Intervalle
{
public:
Intervalle_ (Borne debut_, Borne fin_)
: debut (debut_), fin (fin_) {}
template <class T> bool Contient (T t) const
{ return debut <= t && t <= fin; }
private:
Borne debut, fin;
};

qui permet une utilisation plus claire :

assert (Intervalle<int> (3,6).Contient (5));

Pour simplifier l'écriture, on peut tenter

template <class Borne> class Intervalle_
{
public:
Intervalle_ (Borne debut_, Borne fin_)
: debut (debut_), fin (fin_) {}
template <class T> bool Contient (T t) const
{ return debut <= t && t <= fin; }
private:
Borne debut, fin;
};

template <class Borne>
Intervalle_<Borne> Intervalle (Borne debut, Borne fin)
{
return Intervalle_<Borne> (debut, fin);
}

ce qui devrait permettre d'écrire

assert (Intervalle(3,6).Contient (5));


--
;-)

Avatar
Michel Michaud
Dans news:,
Le PO n'a pas précisé la sémantique qu'il voulait attribuer à
la fonction ...


Ben moi, comme il a mentionné min et max, j'imaginais qu'il
voudrait un algorithme qui renvoie une paire avec ces deux
valeurs. L'idée étant (j'imagine) d'éviter d'avoir à parcourir
deux fois les données.

Ce serait inspiré de equal_range qui renvoie lower_bound et
upper_bound.

Une fonction assez facile à faire, mais min et max aussi, alors
je comprends la question...

(Maintenant que chacun y est allé de son interprétation de la
question, espérons que Michaël Delva viendra préciser sa
pensée !)

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/

Avatar
Michaël Delva
"Michel Michaud" wrote in news:d0VPc.19149$Jq2.856520
@news20.bellglobal.com:

Dans news:,
Le PO n'a pas précisé la sémantique qu'il voulait attribuer à
la fonction ...


Ben moi, comme il a mentionné min et max, j'imaginais qu'il
voudrait un algorithme qui renvoie une paire avec ces deux
valeurs. L'idée étant (j'imagine) d'éviter d'avoir à parcourir
deux fois les données.

Ce serait inspiré de equal_range qui renvoie lower_bound et
upper_bound.

Une fonction assez facile à faire, mais min et max aussi, alors
je comprends la question...

(Maintenant que chacun y est allé de son interprétation de la
question, espérons que Michaël Delva viendra préciser sa
pensée !)



Yep, me revoilà...

Ben en fait je pensais juste à une fonction qui détermine si oui ou non une
valeur se situe entre deux autres, donc dans l'esprit de ce qu'a écrit
Fabien...


1 2