有没有办法用 for 循环(或任何其他循环)填充C++ initializer_list?



我需要在C++中创建一个交互式会话,用户可以在其中测试我创建的类。这包括使用其不同的构造函数创建该类的对象。其中之一是使用 initializer_list 的集合构造函数。

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

MyClass example = {1, 2, 3, 4};

现在我需要找到在交互式会话期间使用它的方法。不知何故,我需要用用户提供的输入填充 {}。用户最多可以在该列表中传递 100 个参数,所以我可能需要某种循环解决方案来解决我的问题。类似的工作方式(抱歉C++/Python 伪代码混合):

MyClass example = {a for a in user_input};

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

std::initializer_list的源数据始终是大括号的初始化列表:{/*stuff*/}。只有此语法构造才能为此类型提供后备数组。

顾名思义,initializer_list用于初始化某些东西;它只是一个中介。如果您需要循环访问一些手动生成的项目列表,这就是容器的用途。

std::initializer_list的长度constexpr。 这意味着它的长度在编译时总是已知的。 用户输入没有此属性。

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

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

MyClass接受std::spanstd::vector,而不是initializer_list或作为的补充。 (std::span比 C++11 更新)。

然后把它传进去。 您可以通过多种方式使用用户输入填充std::vector

最新更新