для каждого в версии GCC и GCC

как я могу использовать для каждого цикла в GCC?

и как я могу получить версию GCC? (в коде)


person user335870    schedule 21.08.2010    source источник
comment
Я не вижу никакой связи между этими двумя вопросами...   -  person kennytm    schedule 21.08.2010


Ответы (2)


Используйте лямбда, например.

// 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.

person kennytm    schedule 21.08.2010
comment
нет, в формате C++0x. как в VC++ 2010: for each(auto it in vec) { cout ‹‹ it ‹‹ endl; } - person user335870; 21.08.2010
comment
@user: for each не C++0x. - person kennytm; 21.08.2010
comment
Является ли for each C++cli или расширением исходного C++? - person Johannes Schaub - litb; 21.08.2010
comment
@Johannes std::for_each(,,) в настоящее время является частью стандарта ISO C++, определенного в 2003 году. Это не расширение, а часть доступных в настоящее время функций C++. Нужно включить заголовок <algorithm>. - person Stephane Rolland; 21.08.2010
comment
GCC 4.6 был выпущен с на основе диапазона. - person Tobu; 11.06.2011
comment
Этот ответ должен быть исправлен. GCC с версии 4.6 поддерживает диапазон на основе. - person Ricky65; 18.08.2011

есть и традиционный способ, не использующий лямбду 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++, которые работают с функторами и лямбда-выражениями.

person Stephane Rolland    schedule 21.08.2010