通常我会在C ++中定义一个大小为n的新数组和向量,如下所示:
int* xArray = new int[n];
vector<int> yVector(n);
但现在我有一个有头的Maze类。应该在标头中声明数组和向量,然后在f.ex中分配。构造函数。
数组在Maze.h中声明如下:
class Maze {
public:
int* xArray;
}
然后在Maze.cpp中分配如下:
xArray = new int[n];
现在我可以使用Maze类中任何函数的xArray。
但是,声明和分配向量的等效方法是什么?这就是我试过的:
在Maze.h中:
class Maze {
public:
vector<int> yVector;
}
在Maze.cpp中:
yVector(n);
但是在编译时我得到了:
error: no match for call to ‘(std::vector<int>) (int)’
yVector(n);
那么它是否认为yVector是一个函数,我试图调用该函数?我尝试通过编写this->yVector(n);
来指定这是一个类字段,但这没有任何区别。
接下来,我尝试将vector<int> yVector(n);
放在构造函数中。它汇编。但是当我稍后尝试在另一个函数中使用yVector[0]
时,我得到Segmentation fault (core dumped)
,所以我想我所做的就是声明一个新的本地向量,这不是我想要的。
那么在使用头文件时我应该如何定义类向量?
答案 0 :(得分:1)
也许您正在寻找的是std::vector::reserve。
请注意,保留后仍需要将push_back
元素放入向量中。它只确保capacity
足以存储所请求的元素数量。
或者,您也可以在构造函数中创建一个新向量并将其复制到成员。
vector<int> temp_vec(n);
yVector = temp_vec;