C ++:优雅地迭代一组数字

时间:2017-02-20 05:01:25

标签: c++ loops c++11 c++14

有人可以建议如何在C ++ 11/14中优雅地迭代数字的常量集(英文含义,而不是C ++含义),最好不要留下像这里的临时对象:

set<int> colors;
colors.insert(0);
colors.insert(2);

for (auto color : colors)
{
    //Do the work
}

?希望找到一个班轮。

换句话说,是否有一种神奇的方式让它看起来像这样:

for (int color in [0,2])//reminds me of Turbo Pascal
{
    //Do the work
}

for (auto color in set<int>(0,2))//Surely it cannot work this way as it is
{
    //Do the work
}

2 个答案:

答案 0 :(得分:3)

您可以使用std::initializer_list代替std::set

for (auto color : {2, 5, 7, 3}) {
    // Magic
}

随附的大括号{ ... }将推导出std::initializer_list<int>,这是可迭代的。

答案 1 :(得分:1)

只是一些随意的想法。 像这样的东西?

for(auto color : set<int>{0, 2}) { // do the work }

或者也许使用功能?

auto worker = [](int x) { // do the work };
worker(0);
worker(2);

为了避免临时对象,可以使用像

这样的模板化函数
template<int N>
void worker(params_list) {
   // do the work
}

然后

worker<0>(params_list);
worker<2>(params_list);