我使用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);
}
答案 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