Диапазон для более двух пар

Скажем, я хочу повторить ряд пар, определенных в строке. Есть ли более короткий способ написать:

for(auto pair : std::initializer_list<std::pair>{{1,2}, {3,4}}) // ... 

?

Просто укажите первый элемент – это пара. Остальное будет выведено автоматически:

 for(auto& pair : {std::pair{1,2}, {3,4}}) ; 

Исчерпывающий закрытый инициализатор выводится как std::initalizer_list , а первый элемент, называемый парой, потребует, чтобы все элементы были инициализатором для пары.

Вы отметили C ++ 11, но для полноты он может быть еще короче в C ++ 17:

 for(auto& pair : {std::pair{1,2}, {3,4}}) ; 

Из-за вывода аргумента шаблона шаблона. Если у вас этого нет, то std::make_pair будет делать, если вы хотите сохранить преимущества вывода аргумента шаблона:

 for(auto& pair : {std::make_pair(1,2), {3,4}}) ; 

Хотя якобы это не так полезно для игры в гольф как версия C ++ 17.

Хороший псевдоним типа ol:

 using pairlist = std::initializer_list>; for(auto pair : pairlist{{1,2}, {3,4}}) { // stuff happens here }