基于范围的超对列表

时间:2017-09-18 14:11:41

标签: c++ c++11

说,我想迭代一些内联定义的对。是否有更短的写作方式:

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

2 个答案:

答案 0 :(得分:10)

只需指定第一个元素就是一对。其余的将自动推断:

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

支持的封闭初始值设定项推导为std::initalizer_list,第一个被命名为一对的元素将需要所有元素作为一对的initalizer。

你标记了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版本的代码打包并不那么有用。

答案 1 :(得分:1)

好的&#39;类型别名:

$.connection.hub.qs = {'MyVariable1' : 'val1', 'MyVariable2' : 'val2'};