在具有容量/调整大小的类中初始化向量
Initializing vector in a class with capacity/resize
我在使用vector作为私有数据成员时遇到了很多麻烦。我不确定如何为 10 个元素保留空间,我尝试了调整大小的组合,我也尝试在类的构造函数中调用矢量构造函数,但我不断收到来自矢量构造函数的编译错误。我想用 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);
}
reserve(( 与 resize(( 不同。有关详细说明,请参阅此答案。https://stackoverflow.com/a/7397862/9281750
由于你想用 10 个元素(即大小为 10(初始化你的向量,你应该在构造函数中使用 resize()
而不是reserve()
。
另一种解决方案是直接在初始化列表中使用向量的构造函数。
bst() : myVector(new vector<T>(10)) {...} //myVector is initialized with 10 default T elements
此外,指向 std::vector 的指针通常不是必需的。你可以简单地将 myVector 变成函数中的 std::vector 和 pass-by-reference。以下操作应执行相同的操作
class bst
{
public:
// constructor: initializes an empty tree
bst() : myVector(10)
{
...
}
private:
...
std::vector<T> myVector;
...
}; // 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);
}
相关文章:
- 如何使用C++初始化向量;脚本化值不是数组、指针或矢量错误
- 在C++中初始化向量映射的最有效方法
- 我使用向量来创建类对象列表.初始化向量时如何使用参数调用构造函数?
- 用向量的向量元素初始化向量的空向量
- 初始化向量数组,其中每个向量的大小为 0
- 如何初始化向量<unordered_map<*,*>>
- 如何在元组初始化向量中删除样板?
- C++ 通过函数声明后初始化向量
- 特征::向量;在函数中使用 Eigen::Matrix3f 的值初始化向量,大于 4 个条目
- 使用所述填充构造函数初始化向量中的向量
- 制作可用于初始化向量的迭代器
- 如何使用sregex_token_iterator对象初始化向量
- 用空向量 c++ 的 M 元素初始化向量
- 用reference_wrapper本地初始化向量
- 将向量元素与字符串元素进行比较,而不初始化向量
- 使用 reference_wrappers 初始化向量
- 从不同类型的容器的迭代器初始化向量
- 在具有容量/调整大小的类中初始化向量
- 在头文件中声明和初始化向量
- 错误:调用'begin(long double [nPoints])'没有匹配函数;使用硬编码的 int 与整数变量初始化向量