【问题标题】:how to assign std::initializer_list to a vector如何将 std::initializer_list 分配给向量
【发布时间】:2019-07-22 08:47:51
【问题描述】:

这是一个需要 std::initializer_list 的构造函数,我想将它分配给向量。我是否需要使用 for 循环将 std::initializer_list 中的每个项目一一分配给向量?

Motor_Group::Motor_Group(std::initializer_list<pros::Motor> port_set)
{
  this->motor_vector = port_set;
}

【问题讨论】:

  • 您是否刚刚尝试过使用简单的赋值,就像在显示的代码中一样?
  • 是的,我有,它向我显示了一堆垃圾错误消息,当我发表评论时它有效
  • 根据文档,std::vector 有一个接受初始化列表的赋值运算符:en.cppreference.com/w/cpp/container/vector/operator%3D
  • 那么也许你应该询问你得到的错误,考虑到它应该可以工作。关于错误的直接问题总是比用这样的间接问题绕过实际问题和问题来得更快。
  • 我认为Minimal, Reproducible Example 在这里会有很大帮助。

标签: c++ stdvector stdinitializerlist


【解决方案1】:

我需要使用 for 循环 [...] 吗?

没有。为了初始化std::vector&lt;pros::Motor&gt;类型的Motor_Group::motor_vector,你应该使用构造函数Motor::Group的成员初始化列表:

Motor_Group::Motor_Group(std::initializer_list<pros::Motor> port_set) :
    motor_vector{port_set}
{}

在构造函数主体中,初始化应该优先于赋值,因为它会首先导致不必要地调用数据成员的默认构造函数。这不一定是可衡量的性能损失(但在极少数情况下可能是),而是需要更多思考而不是简单初始化的控制流。

【讨论】:

    【解决方案2】:

    试试

    this->motor_vector = std::vector{port_set}; 
    

    或者更好,使用初始化列表:

    Motor_Group::Motor_Group(std::initializer_list<pros::Motor> port_set)
        : motor_vector{port_set} {}
    

    【讨论】:

      猜你喜欢
      • 2022-07-06
      • 2020-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 2015-02-09
      相关资源
      最近更新 更多