使用capacity / resize初始化类中的向量

时间:2018-04-15 20:05:29

标签: c++ vector constructor

我使用vector作为私有数据成员时遇到了很多麻烦。我不知道如何为10个元素保留空间,我尝试了resize的组合,我也尝试在我的类的构造函数中调用向量构造函数,但我不断从向量构造函数中获取编译错误。我想用10个元素初始化向量,因为我试图用我的二叉树中的值填充向量。

class bst
{
public:
    // constructor:  initializes an empty tree
    bst() 
   {
        root = nullptr;
        totalNodes = 0;
        treeHeight = -1; // empty tree with no nodes has a height of -1
        myVector->reserve(10);
    }
private:

    bst_node * root;
    int totalNodes;
    std::vector<T> *myVector;
    int treeHeight; // height of the tree to be used later for some functions
}; // end class bst

void _to_vector(bst_node *r, std::vector<T> *vec) 
{
    if (r == nullptr) {
        return;
    }
    _to_vector(r->left, vec);
    vec->push_back(r->val);
    _to_vector(r->right, vec);
}

1 个答案:

答案 0 :(得分:1)

reserve()与resize()不同。有关详细说明,请参阅此答案。 https://stackoverflow.com/a/7397862/9281750

由于你想用10个元素初始化你的向量(即大小为10),你应该在构造函数中使用ImageIO而不是resize()

另一种解决方案是直接在初始化列表中使用向量的构造函数。

reserve()

此外,通常不需要指向std :: vector的指针。您可以简单地将myVector设为std :: vector并在函数中传递引用。以下应该执行相同的操作

bst() :  myVector(new vector<T>(10)) {...} //myVector is initialized with 10 default T elements