C++ 在循环中使用初始值设定项列表有效吗?如果没有,它是如何失败的,为什么?
答案暗示在循环中使用初始值设定项列表或使用“未知数据”是行不通的。他们没有说为什么,或者如何失败 即,这样做:(这是一个无意义的操作,但表明列表的内容会随着循环的进行而改变)C++ 在循环中使用初始值设定项列表有效吗?如果没有,它是如何失败的,为什么?,c++,c++11,initializer-list,C++,C++11,Initializer List,答案暗示在循环中使用初始值设定项列表或使用“未知数据”是行不通的。他们没有说为什么,或者如何失败 即,这样做:(这是一个无意义的操作,但表明列表的内容会随着循环的进行而改变) std::向量向量向量机; //假设vec中填充了一些有用的数据 对于(int i=0;i
std::向量向量向量机;
//假设vec中填充了一些有用的数据
对于(int i=0;i<10;i++)
{
对于(int j=0;j<10;j++)
{
对于(int k=0;k<10;k++)
{
结果=std::max({vec[i],vec[j],vec[k]});
//做一些有结果的事情。。。
}
}
}
我有一段代码,它经常使用初始值设定项列表来获取最多3个或更多元素。看起来一切都在运转,但我不确定它们是否在运转
我想知道它是否有效。如果没有,它是如何失败的以及为什么失败的
我使用了一组非常严重的警告,从来没有报告过“警告:可能错误地使用了初始值设定项列表”等等
这个问题的答案意味着在循环中使用初始值设定项列表或使用“未知数据”是行不通的
由于遗漏了一个词,这是对所说内容的误解。是针对这一评论:
如果数据是在循环中生成的,或者运行时数据的数量发生了变化,您将如何实现这一点
重点补充。所以当这个人说:
如果数据在运行时发生更改
回复只是省略了“数字”部分,因为这是对之前评论的直接回复
带括号的init列表可以包含任意数量的项,但列表中的项数必须在编译时定义。我不确定链接问题中的哪一个似乎暗示它不起作用。只要索引在边界内,这段代码就可以了。Yuushi的回答是:“如果数据在运行时发生变化,请将其存储在容器中并使用max_元素”。第二个答案还表示“假设您有一组未知的数据,您总是可以将其放置在数组/向量/列表中并运行…”这都意味着如果数据发生更改,它将无法工作。我只是误读了吗?他们说的是,如果您需要在运行时获取数据,那么您需要使用其他容器。从技术上讲,您没有在运行时获取数据,因为您正在将
std::max({vec[i],vec[j],vec[k]})
编码到程序中。您不能使用std::initializer\u list
从用户获取数据,但您可以在获得数据后从用户的数据中构建一个。有意义吗?向量、数组等都是可写的。您可以向它们添加数据<代码>标准::初始化器列表不可用。一旦创建了一个,它的大小和内部元素的值都是恒定的。这就是为什么您不能使用它来获取输入。“您只能创建一个元素并传递给他人阅读。@TylerShellberg在链接的问题中,他们说当元素的数量发生变化时,使用max\u element
。”。例如,如果不知道初始值设定项列表中是否有3个或4个值,则不能使用max
。在您的例子中,您似乎知道它将始终是3个元素,这与max
一起工作,即使3个元素的值在运行时发生变化。
std::vector<float> vec;
// Assume vec is filled with some useful data
for(int i = 0; i < 10; i++)
{
for(int j = 0; j < 10; j++)
{
for(int k = 0; k < 10; k++)
{
result = std::max({vec[i], vec[j], vec[k]});
// do something with result...
}
}
}