如何在标头中声明向量然后分配它

时间:2016-10-01 18:29:21

标签: c++ c++11 vector header declaration

通常我会在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),所以我想我所做的就是声明一个新的本地向量,这不是我想要的。

那么在使用头文件时我应该如何定义类向量?

1 个答案:

答案 0 :(得分:1)

也许您正在寻找的是std::vector::reserve。 请注意,保留后仍需要将push_back元素放入向量中。它只确保capacity足以存储所请求的元素数量。

或者,您也可以在构造函数中创建一个新向量并将其复制到成员。

vector<int> temp_vec(n);
yVector = temp_vec;