有没有办法填充C++;带有for循环(或任何其他循环)的初始值设定项\u列表? 我需要在C++中创建一个交互式会话,用户可以在其中测试我创建的类。这包括使用不同的构造函数创建该类的对象。其中之一是使用初始值设定项\u list的集合构造函数

有没有办法填充C++;带有for循环(或任何其他循环)的初始值设定项\u列表? 我需要在C++中创建一个交互式会话,用户可以在其中测试我创建的类。这包括使用不同的构造函数创建该类的对象。其中之一是使用初始值设定项\u list的集合构造函数,c++,c++11,list-initialization,C++,C++11,List Initialization,在我的代码中,我可以运行: MyClass example = {1, 2, 3, 4}; 现在我需要找到在交互式会话中使用它的方法。不知何故,我需要用用户提供的输入填充{}。用户可以在该列表中传递多达100个参数,所以我可能需要某种循环解决方案来解决我的问题。工作原理如下(很抱歉C++/Python伪代码混合): 你知道我可以用什么来解决这个问题吗?std::initializer\u list的源数据总是一个带括号的init list:{/*stuff*/}。只有此语法结构才能提供此类型的

在我的代码中,我可以运行:

MyClass example = {1, 2, 3, 4};
现在我需要找到在交互式会话中使用它的方法。不知何故,我需要用用户提供的输入填充{}。用户可以在该列表中传递多达100个参数,所以我可能需要某种循环解决方案来解决我的问题。工作原理如下(很抱歉C++/Python伪代码混合):


你知道我可以用什么来解决这个问题吗?

std::initializer\u list的源数据总是一个带括号的init list:
{/*stuff*/}
。只有此语法结构才能提供此类型的支持数组


初始化器\u list
,顾名思义,是用来初始化某物的;它只是一个中介。如果您需要循环一些手工生成的项目列表,这就是容器的用途。

std::initializer_list的源数据始终是一个带括号的init list:
{/*stuff*/}
。只有此语法结构才能提供此类型的支持数组


初始化器\u list
,顾名思义,是用来初始化某物的;它只是一个中介。如果您需要循环一些手动生成的项目列表,这就是容器的用途。

std::initializer\u list
具有
constepr
长度。这意味着它的长度在编译时总是已知的。用户输入没有此属性

因此,它不适合存储用户输入

std::vector
具有非编译时长度。考虑使用它。

MyClass
接受
std::span
std::vector
而不是
初始值设定项列表
,或在其之外接受
初始值设定项列表
。(
std::span
比新)


然后把它传进来。有多种方法可以使用用户输入填充
std::vector

std::initializer\u list
具有
constepr
长度。这意味着它的长度在编译时总是已知的。用户输入没有此属性

因此,它不适合存储用户输入

std::vector
具有非编译时长度。考虑使用它。

MyClass
接受
std::span
std::vector
而不是
初始值设定项列表
,或在其之外接受
初始值设定项列表
。(
std::span
比新)


然后把它传进来。有许多方法可以使用用户输入填充
std::vector

这是不可能的。您不应该这样做。非空的
std::initializer\u list
仅在元素都列在一个位置的上下文中创建。通常通过使用两个迭代器的构造函数来解决。示例:
MyClass示例(user_input.begin(),user_input.end())我已经看到了一些第三方库,它们将Python样式列表理解添加到C++中。听起来这就是这里被问到的问题,这是不可能的。您不应该这样做。非空的
std::initializer\u list
仅在元素都列在一个位置的上下文中创建。通常通过使用两个迭代器的构造函数来解决。示例:
MyClass示例(user_input.begin(),user_input.end())我已经看到了一些第三方库,它们将Python样式列表理解添加到C++中。听起来这就是这里被问到的问题。
MyClass example = {a for a in user_input};