有没有办法填充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};