как я могу использовать для каждого цикла в GCC?
и как я могу получить версию GCC? (в коде)
как я могу использовать для каждого цикла в GCC?
и как я могу получить версию GCC? (в коде)
Используйте лямбда, например.
// C++0x only.
std::for_each(theContainer.begin(), theContainer.end(), [](someType x) {
// do stuff with x.
});
цикл for на основе диапазона поддерживается GCC с версии 4.6.
// C++0x only
for (auto x : theContainer) {
// do stuff with x.
}
Синтаксис "для каждого" цикла является расширением MSVC. Он недоступен в других компиляторах.
// MSVC only
for each (auto x in theContainer) {
// do stuff with x.
}
Но вы можете просто использовать Boost.Foreach. Он переносим и доступен без C++0x.
// Requires Boost
BOOST_FOREACH(someType x, theContainer) {
// do stuff with x.
}
См. Как протестировать текущую версию GCC? о том, как получить версию GCC.
for each
не C++0x.
- person kennytm; 21.08.2010
for each
C++cli или расширением исходного C++?
- person Johannes Schaub - litb; 21.08.2010
<algorithm>
.
- person Stephane Rolland; 21.08.2010
есть и традиционный способ, не использующий лямбду C++0X. Заголовок <algorithm>
предназначен для использования с объектами, имеющими определенные операторные скобки. (С++ 0x лямбда-выражения относятся только к подмножеству объектов, которые имеют оператор ())
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);
}
см. справочник по заголовку алгоритма для получения списка всех стандартных функций C++, которые работают с функторами и лямбда-выражениями.