2010-08-21 7 views

Répondre

20

Utilisez un lambda, par ex. Le range-based for loop est pris en charge par GCC depuis la version 4.6.

// C++0x only 
for (auto x : theContainer) { 
    // do stuff with x. 
} 

La syntaxe "for each" loop est une extension MSVC. Il n'est pas disponible dans d'autres compilateurs.

// MSVC only 
for each (auto x in theContainer) { 
    // do stuff with x. 
} 

Mais vous pouvez simplement utiliser Boost.Foreach. Il est portable et disponible sans C++ 0x aussi.

// Requires Boost 
BOOST_FOREACH(someType x, theContainer) { 
    // do stuff with x. 
} 

Voir How do I test the current version of GCC ? sur la façon d'obtenir la version de GCC.

+0

non, au format C++ 0x. comme VC++ 2010: pour chaque (auto it dans vec) { cout << it << endl; } – user335870

+1

@user: 'pour chaque' n'est pas C++ 0x. – kennytm

+1

Est-ce que 'pour chaque' C++ cli, ou est-ce une extension au C++ brut? –

6

il y a aussi la manière traditionnelle, n'utilisant pas C++ 0X lambda. L'en-tête <algorithm> est conçu pour être utilisé avec des objets ayant une parenthèse d'opérateur définie. (C++ 0x lambdas ne sont que des sous-ensemble des objets qui ont l'opérateur())

struct Functor 
{ 
    void operator()(MyType& object) 
    { 
     // what you want to do on objects 
    } 
} 

void Foo(std::vector<MyType>& vector) 
{ 
    Functor functor; 
    std::for_each(vector.begin(), vector.end(), functor); 
} 

voir algorithm header reference pour obtenir une liste de tous les C++ fonctions standard qui fonctionnent avec functors et lambdas.