Информация об изменениях

Сообщение Re[2]: range based for - первый/последний? от 14.03.2019 7:56

Изменено 14.03.2019 9:13 rg45

Re[2]: range based for - первый/последний?
Здравствуйте, B0FEE664, Вы писали:

M>>Для нового range-for'а есть какой-нибудь вариант?

BFE>Есть вот такой модный вариант, но он не то, что вы просите:
BFE>
BFE>  if ( auto it = std::begin(v), itEnd = std::end(v); itEnd != it )
BFE>  {
BFE>    std::cout << *it;
BFE>    for(++it; itEnd != it; ++it)
BFE>    {
BFE>      std::cout << ", " << *it;
BFE>    }
BFE>  }
BFE>


Вот эта многоэтажность в условии глаз не радует совершенно. Зачем вообще здесь что-то выдумывать, когда все предельно просто:

  if (!std::empty(v))
  {
    std::cout << std::front(v);
    for(auto it = std::begin(v) + 1; it != std::end(v); ++it)
    {
      std::cout << ", " << *it;
    }
  }


Ну правда std::empty и std::front появляются только в С++17. Но их отсутствие восполняется элементарно, могу показать, если нужно.
Re[2]: range based for - первый/последний?
Здравствуйте, B0FEE664, Вы писали:

M>>Для нового range-for'а есть какой-нибудь вариант?

BFE>Есть вот такой модный вариант, но он не то, что вы просите:
BFE>
BFE>  if ( auto it = std::begin(v), itEnd = std::end(v); itEnd != it )
BFE>  {
BFE>    std::cout << *it;
BFE>    for(++it; itEnd != it; ++it)
BFE>    {
BFE>      std::cout << ", " << *it;
BFE>    }
BFE>  }
BFE>


Вот эта многоэтажность в условии глаз не радует совершенно. Зачем вообще здесь что-то выдумывать, когда все предельно просто:

  if (!std::empty(v))
  {
    std::cout << std::front(v);
    for(auto it = std::begin(v) + 1; it != std::end(v); ++it)
    {
      std::cout << ", " << *it;
    }
  }


Ну правда std::empty и std::front появляются только в С++17. Но их отсутствие легко восполняется, могу показать, если нужно.