для каждого в GCC и GCC версии - PullRequest
4 голосов
/ 21 августа 2010

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

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

Ответы [ 2 ]

22 голосов
/ 21 августа 2010

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

// C++0x only.
std::for_each(theContainer.begin(), theContainer.end(), [](someType x) {
    // do stuff with x.
});

Цикл для диапазона поддерживается 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.

6 голосов
/ 21 августа 2010

также существует традиционный способ, не использующий C ++ 0X lambda. Заголовок <algorithm> предназначен для использования с объектами, имеющими определенные операторные скобки. (Лямбды C ++ 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 ++, которые работают с функторами и лямбдами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...