std :: deque.push_back(x) - 究竟是做什么的?

时间:2011-12-04 19:18:18

标签: c++ stl

根据http://www.cplusplus.com/reference/stl/deque/push_front/ x是“要复制到新元素的值。 T是第一个模板参数(存储在容器中的元素的类型)。“

内置类型足够简单,但现在我正在创建一个类,以及此类对象的副本 - 我需要什么才能使push_front工作?

我想我需要构造函数,但函数头是什么?

4 个答案:

答案 0 :(得分:4)

AFAIK,只对std::deque<>中存储的元素类型的要求是:

  1. 公共默认构造函数(在.resize()
  2. 等成员中使用
  3. 公共副本构造函数(容器存储项目的副本,可以随意在内部复制它们)
  4. 公共分配操作员(容器可以随意在内部覆盖项目)
  5. 一个公共nothrow()析构函数(没有它,容器不能保证其异常保证。
  6. 例如,这个简单的类可以正常工作:

     class Person
     {
         std::string myName;
     public:
          void name(const string&);
          const std::string& name(const string&) const;
     };
    

    因为编译器生成的默认值足够好。它可以像:

    一样使用
     std::dequeue<Person> people;
     people.push_back(Person());
     people.back().name("George");
    

答案 1 :(得分:1)

您需要为您的类,析构函数和复制构造函数指定一个赋值运算符。

答案 2 :(得分:0)

您的类需要是可复制的(复制构造函数和赋值运算符)并且具有公共析构函数;默认构造函数也有帮助。

请注意,如果您的类不复杂,编译器提供的复制构造函数,赋值运算符和析构函数就足够了。

答案 3 :(得分:0)

如果您拥有类,则推入deque实例。已调用复制构造函数。您必须提供或使用默认