【问题标题】:push_back new element to vectorpush_back 新元素到向量
【发布时间】:2016-01-24 17:29:43
【问题描述】:

我有这个向量:

std::vector<my_class> my_vector;

我想使用默认构造函数添加新项目。所以,我写:

my_vector.push_back(my_class());

有没有直接提及类型的方法?例如:

 my_vector.push_back(auto()); // imaginary code

【问题讨论】:

  • 有很多方法,但你拥有的方法(明确使用my_class())是最易读的,因此也是最可维护的。
  • my_class 就是一个例子。真正的例子是 std::pair<:vector>>, std::vector<:vector>> >() 所以我怕加了这么长的可读性
  • 为了完整起见,另一种选择是my_vector.resize(my_vector.size() + 1)

标签: c++ c++11 vector


【解决方案1】:

std::vector 有一个名为 emplace_back 的成员函数,它根据提供给函数的参数在向量中构造向量元素类型的新实例。

所以如果my_class 是默认可构造的,你可以这样做:

my_vector.emplace_back();

【讨论】:

    【解决方案2】:

    my_vector.resize(my_vector.size() + 1);

    【讨论】:

      【解决方案3】:

      如果你的类允许默认构造函数:

      my_vector.push_back({});
      

      【讨论】:

      • 它不需要初始化列表构造函数。它只需要一个默认构造函数(当然还支持 C++11)。
      【解决方案4】:
      my_vector.push_back(decltype(my_vector)::value_type());
      

      【讨论】:

        【解决方案5】:

        my_vector.push_back({});

        甚至更好

        my_vector.emplace_back();

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-09-18
          • 1970-01-01
          • 2013-03-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-23
          相关资源
          最近更新 更多