如何在deque中使用用户定义的类?

时间:2012-05-23 17:05:13

标签: c++ stl

class Node
{
    int x,y;
    Node *left, *right;
    Node(int x, int y);
    Node();
};

如何使用此方法制作双端队列?

deque<Node> balBinaryTree;

给我错误

syntax error : missing ';' before '<'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2238: unexpected token(s) preceding ';'

--- ---编辑

--- ---编辑 我也应该这样做

  deque<Node> balBinaryTree;

  deque<Node*> balBinaryTree;

3 个答案:

答案 0 :(得分:1)

#include <deque>
std::deque<Node> balBinaryTree;
  

我也应该这样做

     

deque<Node> balBinaryTree;

     

deque<Node*> balBinaryTree;

你应该自己决定。 deque<Node>会导致不必要的复制。 deque<Node*>导致可能的内存管理问题。

答案 1 :(得分:0)

#include <deque>
#include <memory>
std::deque<std::shared_ptr<Node>> balBinaryTree;

这将为您处理内存管理,意味着您不必明确担心内存管理。

注意:你在Node中使用裸指针,所以要小心并确保对象的生命周期超过原始指针,这样你就不会泄漏。

答案 2 :(得分:0)

如果您正在使用:

deque<Node> balBinaryTree

你可能想要使用emplace调用

balBinaryTree.emplace_back(x,y) 调用构造函数并同时插入。将避免必须像deque<Node*>那样处理内存管理,并避免发生额外的副本,如下所示:

deque<Node> balBinaryTree;
Node inst_node(10,20); 
balBinaryTree.push_back( inst_node )