C++;:优雅地迭代一组数字 有人建议C++ 11/14如何优雅地迭代一个常数集(在英语意义上,而不是C++意义),最好不要在这里留下临时对象: set<int> colors; colors.insert(0); colors.insert(2); for (auto color : colors) { //Do the work }
或C++;:优雅地迭代一组数字 有人建议C++ 11/14如何优雅地迭代一个常数集(在英语意义上,而不是C++意义),最好不要在这里留下临时对象: set<int> colors; colors.insert(0); colors.insert(2); for (auto color : colors) { //Do the work },c++,loops,c++11,c++14,C++,Loops,C++11,C++14,或 for(集合(0,2)中的自动着色)//它肯定不能按现在的方式工作 { //做这项工作 } 只是一些随机的想法。 像这样的 for(auto color : set<int>{0, 2}) { // do the work } 为了避免临时对象,可以使用模板化函数,如 template<int N> void worker(params_list) { // do the work } 模板 无效工作程序(参数列表){ //做这项工作 } 然后 worke
for(集合(0,2)中的自动着色)//它肯定不能按现在的方式工作
{
//做这项工作
}
只是一些随机的想法。
像这样的
for(auto color : set<int>{0, 2}) { // do the work }
为了避免临时对象,可以使用模板化函数,如
template<int N>
void worker(params_list) {
// do the work
}
模板
无效工作程序(参数列表){
//做这项工作
}
然后
worker(参数列表);
工人(参数列表);
只是一些随机的想法。
像这样的
for(auto color : set<int>{0, 2}) { // do the work }
为了避免临时对象,可以使用模板化函数,如
template<int N>
void worker(params_list) {
// do the work
}
模板
无效工作程序(参数列表){
//做这项工作
}
然后
worker(参数列表);
工人(参数列表);
您可以使用std::initializer\u list
代替std::set
:
for (auto color : {2, 5, 7, 3}) {
// Magic
}
用括号括起来的
{…}
将推导出一个std::initializer\u list
,它是可编辑的。您可以使用std::initializer\u list
而不是std::set
:
for (auto color : {2, 5, 7, 3}) {
// Magic
}
用括号括起来的
{…}
将推导出一个std::initializer\u list
,它是可迭代的。您迭代的是一组整数。使用引用进行迭代的开销将相等或更大。你所拥有的一切都很好。当你说像这里这样的临时对象时,你指的是哪一个对象?例如,(auto const&color:colors)是有效的。我正在寻找一种方法,使源代码优雅,避免引入“colors”。set
在这里没有明显的用途,因为你的值是已知的<代码>for(自动着色:{0,2})很好。您迭代的是一组整数。使用引用进行迭代的开销将相等或更大。你所拥有的一切都很好。当你说像这里这样的临时对象时,你指的是哪一个对象?例如,(auto const&color:colors)是有效的。我正在寻找一种方法,使源代码优雅,避免引入“colors”。set
在这里没有明显的用途,因为你的值是已知的<代码>用于(自动颜色:{0,2})可以。
for (auto color : {2, 5, 7, 3}) {
// Magic
}