有人可以建议如何在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
}
答案 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);