Итерация в C ++, как в Python - PullRequest
0 голосов
/ 07 июня 2018

Я хотел бы перебрать в C ++ набор значений.В python это выглядит как

for v in [v1, v2, v3]:
    do_something()

Как правильно сделать это в C ++?

Ответы [ 3 ]

0 голосов
/ 07 июня 2018
for (const auto& v : {v1, v2, v3}) { do_something(); }

Было бы эквивалентно (за исключением того факта, что элементы в списке инициализатора концептуально будут скопированы - даже если оптимизатор исключит эти копии - поэтому их необходимо будет копировать).

0 голосов
/ 08 июня 2018

Как насчет std :: apply C ++ 17 функция:

std::apply([](auto&& v){ do_something_over_v();}, std::tie(v1,v2,v3) ) ;
  • Не нужно копировать элементы v1, v2, v3, просто взяли ссылку на них,
  • Не требуется указывать тип идентификации v1, v2, v3.

Если у вас нет C ++ 17, просто скопируйте реализацию из ссылки -), работайте дляРежим C ++ 14, насколько я знаю.

ссылка на std :: apply

0 голосов
/ 07 июня 2018

Вы можете использовать ключевое слово auto и диапазон, основанный на цикле

 std::vector<int> v = {0, 1, 2, 3, 4, 5};

 for (auto const& e:v){
      // here e is value from v
 } 

Дополнительная информация: https://en.cppreference.com/w/cpp/language/range-for

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