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...
    }
  }
}