quel est le moyen le plus élégant de récupérer un iterator (et pas un reverse_iterator) sur le dernier élément d'une std::list?
(++l.rbegin()).base()
?
Pour utiliser l'opérateur ++ sur un itérateur, il faut un lvalue. Sinon, ça pourrait marcher, comme ça pourrait ne pas marcher.
C'est un peu trop rapide pour moi. J'arrive pas à trouver quand ça n'est pas la cas ?
David
James Kanze
On Jul 17, 10:39 pm, David Fleury wrote:
James Kanze a écrit :
> On Jul 17, 9:46 pm, David Fleury wrote: >> Guillaume GOURDIN a écrit :
>>> quel est le moyen le plus élégant de récupérer un iterator >>> (et pas un reverse_iterator) sur le dernier élément d'une >>> std::list?
>> (++l.rbegin()).base()
>> ?
> Pour utiliser l'opérateur ++ sur un itérateur, il faut un > lvalue. Sinon, ça pourrait marcher, comme ça pourrait ne pas > marcher.
C'est un peu trop rapide pour moi. J'arrive pas à trouver quand ça n'est pas la cas ?
Quand l'implémentation ne le supporte pas. Si l'« itérateur » n'est qu'un typedef à un pointeur, par exemple (comme c'était le cas pour std::vector<>::iterator dans beaucoup des premières implémentations), ou si l'opérateur ++ n'est pas membre.
-- 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
On Jul 17, 10:39 pm, David Fleury <dfleu...@libertysurf.fr> wrote:
James Kanze a écrit :
> On Jul 17, 9:46 pm, David Fleury <dfleu...@libertysurf.fr> wrote:
>> Guillaume GOURDIN a écrit :
>>> quel est le moyen le plus élégant de récupérer un iterator
>>> (et pas un reverse_iterator) sur le dernier élément d'une
>>> std::list?
>> (++l.rbegin()).base()
>> ?
> Pour utiliser l'opérateur ++ sur un itérateur, il faut un
> lvalue. Sinon, ça pourrait marcher, comme ça pourrait ne pas
> marcher.
C'est un peu trop rapide pour moi.
J'arrive pas à trouver quand ça n'est pas la cas ?
Quand l'implémentation ne le supporte pas. Si l'« itérateur »
n'est qu'un typedef à un pointeur, par exemple (comme c'était le
cas pour std::vector<>::iterator dans beaucoup des premières
implémentations), ou si l'opérateur ++ n'est pas membre.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
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
> On Jul 17, 9:46 pm, David Fleury wrote: >> Guillaume GOURDIN a écrit :
>>> quel est le moyen le plus élégant de récupérer un iterator >>> (et pas un reverse_iterator) sur le dernier élément d'une >>> std::list?
>> (++l.rbegin()).base()
>> ?
> Pour utiliser l'opérateur ++ sur un itérateur, il faut un > lvalue. Sinon, ça pourrait marcher, comme ça pourrait ne pas > marcher.
C'est un peu trop rapide pour moi. J'arrive pas à trouver quand ça n'est pas la cas ?
Quand l'implémentation ne le supporte pas. Si l'« itérateur » n'est qu'un typedef à un pointeur, par exemple (comme c'était le cas pour std::vector<>::iterator dans beaucoup des premières implémentations), ou si l'opérateur ++ n'est pas membre.
-- 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
Sylvain Togni
Guillaume GOURDIN a écrit :
Bonjour à tous,
quel est le moyen le plus élégant de récupérer un iterator (et pas un reverse_iterator) sur le dernier élément d'une std::list?
boost::prior(list.end())
-- Sylvain Togni
Guillaume GOURDIN a écrit :
Bonjour à tous,
quel est le moyen le plus élégant de récupérer un iterator (et pas un
reverse_iterator) sur le dernier élément d'une std::list?
quel est le moyen le plus élégant de récupérer un iterator (et pas un reverse_iterator) sur le dernier élément d'une std::list?
boost::prior(list.end())
-- Sylvain Togni
David Fleury
James Kanze a écrit :
On Jul 17, 10:39 pm, David Fleury wrote:
James Kanze a écrit :
On Jul 17, 9:46 pm, David Fleury wrote:
Guillaume GOURDIN a écrit :
quel est le moyen le plus élégant de récupérer un iterator (et pas un reverse_iterator) sur le dernier élément d'une std::list?
(++l.rbegin()).base()
?
Pour utiliser l'opérateur ++ sur un itérateur, il faut un lvalue. Sinon, ça pourrait marcher, comme ça pourrait ne pas marcher.
C'est un peu trop rapide pour moi. J'arrive pas à trouver quand ça n'est pas la cas ?
Quand l'implémentation ne le supporte pas. Si l'« itérateur » n'est qu'un typedef à un pointeur, par exemple (comme c'était le cas pour std::vector<>::iterator dans beaucoup des premières implémentations), ou si l'opérateur ++ n'est pas membre.
Ok pour le premier point, mais le deuxième, la norme n'impose pas l'opérateur ++ d'être membre ? On va dire que non alors.
L'utilisation de boost semble plus élégante (bon faut installer boost)
David
James Kanze a écrit :
On Jul 17, 10:39 pm, David Fleury <dfleu...@libertysurf.fr> wrote:
James Kanze a écrit :
On Jul 17, 9:46 pm, David Fleury <dfleu...@libertysurf.fr> wrote:
Guillaume GOURDIN a écrit :
quel est le moyen le plus élégant de récupérer un iterator
(et pas un reverse_iterator) sur le dernier élément d'une
std::list?
(++l.rbegin()).base()
?
Pour utiliser l'opérateur ++ sur un itérateur, il faut un
lvalue. Sinon, ça pourrait marcher, comme ça pourrait ne pas
marcher.
C'est un peu trop rapide pour moi.
J'arrive pas à trouver quand ça n'est pas la cas ?
Quand l'implémentation ne le supporte pas. Si l'« itérateur »
n'est qu'un typedef à un pointeur, par exemple (comme c'était le
cas pour std::vector<>::iterator dans beaucoup des premières
implémentations), ou si l'opérateur ++ n'est pas membre.
Ok pour le premier point, mais le deuxième, la norme n'impose
pas l'opérateur ++ d'être membre ?
On va dire que non alors.
L'utilisation de boost semble plus élégante (bon faut installer boost)
quel est le moyen le plus élégant de récupérer un iterator (et pas un reverse_iterator) sur le dernier élément d'une std::list?
(++l.rbegin()).base()
?
Pour utiliser l'opérateur ++ sur un itérateur, il faut un lvalue. Sinon, ça pourrait marcher, comme ça pourrait ne pas marcher.
C'est un peu trop rapide pour moi. J'arrive pas à trouver quand ça n'est pas la cas ?
Quand l'implémentation ne le supporte pas. Si l'« itérateur » n'est qu'un typedef à un pointeur, par exemple (comme c'était le cas pour std::vector<>::iterator dans beaucoup des premières implémentations), ou si l'opérateur ++ n'est pas membre.
Ok pour le premier point, mais le deuxième, la norme n'impose pas l'opérateur ++ d'être membre ? On va dire que non alors.
L'utilisation de boost semble plus élégante (bon faut installer boost)
David
James Kanze
On Jul 18, 9:51 pm, David Fleury wrote:
James Kanze a écrit : > On Jul 17, 10:39 pm, David Fleury wrote: >> James Kanze a écrit :
>>> On Jul 17, 9:46 pm, David Fleury wrote: >>>> Guillaume GOURDIN a écrit :
>>>>> quel est le moyen le plus élégant de récupérer un iterator >>>>> (et pas un reverse_iterator) sur le dernier élément d'une >>>>> std::list?
>>>> (++l.rbegin()).base()
>>>> ?
>>> Pour utiliser l'opérateur ++ sur un itérateur, il faut un >>> lvalue. Sinon, ça pourrait marcher, comme ça pourrait ne pas >>> marcher.
>> C'est un peu trop rapide pour moi. >> J'arrive pas à trouver quand ça n'est pas la cas ?
> Quand l'implémentation ne le supporte pas. Si l'« itérateur » > n'est qu'un typedef à un pointeur, par exemple (comme c'était le > cas pour std::vector<>::iterator dans beaucoup des premières > implémentations), ou si l'opérateur ++ n'est pas membre.
Ok pour le premier point, mais le deuxième, la norme n'impose pas l'opérateur ++ d'être membre ?
Non.
On va dire que non alors.
L'utilisation de boost semble plus élégante (bon faut installer boost)
Faute de quoi, c'est vraiment un petit template que trois ou quatre lignes, qu'on doit pouvoir écrire soi-même.
-- 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
On Jul 18, 9:51 pm, David Fleury <dfleu...@libertysurf.fr> wrote:
James Kanze a écrit :
> On Jul 17, 10:39 pm, David Fleury <dfleu...@libertysurf.fr> wrote:
>> James Kanze a écrit :
>>> On Jul 17, 9:46 pm, David Fleury <dfleu...@libertysurf.fr> wrote:
>>>> Guillaume GOURDIN a écrit :
>>>>> quel est le moyen le plus élégant de récupérer un iterator
>>>>> (et pas un reverse_iterator) sur le dernier élément d'une
>>>>> std::list?
>>>> (++l.rbegin()).base()
>>>> ?
>>> Pour utiliser l'opérateur ++ sur un itérateur, il faut un
>>> lvalue. Sinon, ça pourrait marcher, comme ça pourrait ne pas
>>> marcher.
>> C'est un peu trop rapide pour moi.
>> J'arrive pas à trouver quand ça n'est pas la cas ?
> Quand l'implémentation ne le supporte pas. Si l'« itérateur »
> n'est qu'un typedef à un pointeur, par exemple (comme c'était le
> cas pour std::vector<>::iterator dans beaucoup des premières
> implémentations), ou si l'opérateur ++ n'est pas membre.
Ok pour le premier point, mais le deuxième, la norme n'impose
pas l'opérateur ++ d'être membre ?
Non.
On va dire que non alors.
L'utilisation de boost semble plus élégante (bon faut
installer boost)
Faute de quoi, c'est vraiment un petit template que trois ou
quatre lignes, qu'on doit pouvoir écrire soi-même.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
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
James Kanze a écrit : > On Jul 17, 10:39 pm, David Fleury wrote: >> James Kanze a écrit :
>>> On Jul 17, 9:46 pm, David Fleury wrote: >>>> Guillaume GOURDIN a écrit :
>>>>> quel est le moyen le plus élégant de récupérer un iterator >>>>> (et pas un reverse_iterator) sur le dernier élément d'une >>>>> std::list?
>>>> (++l.rbegin()).base()
>>>> ?
>>> Pour utiliser l'opérateur ++ sur un itérateur, il faut un >>> lvalue. Sinon, ça pourrait marcher, comme ça pourrait ne pas >>> marcher.
>> C'est un peu trop rapide pour moi. >> J'arrive pas à trouver quand ça n'est pas la cas ?
> Quand l'implémentation ne le supporte pas. Si l'« itérateur » > n'est qu'un typedef à un pointeur, par exemple (comme c'était le > cas pour std::vector<>::iterator dans beaucoup des premières > implémentations), ou si l'opérateur ++ n'est pas membre.
Ok pour le premier point, mais le deuxième, la norme n'impose pas l'opérateur ++ d'être membre ?
Non.
On va dire que non alors.
L'utilisation de boost semble plus élégante (bon faut installer boost)
Faute de quoi, c'est vraiment un petit template que trois ou quatre lignes, qu'on doit pouvoir écrire soi-même.
-- 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