访问在类构造函数中创建的std :: vector

时间:2014-11-25 06:46:18

标签: c++

我正在尝试使用std :: vector作为元素创建一个类。我在构造函数中初始化并填充向量。但是,当我尝试使用this->在类中使用方法访问向量时,我得到一个空向量。

代码看起来非常像以下内容:

myclass::myclass() {       
    std::vector<double> pars(1000);
    for (int i = 0; i < 1000; i++) {
    pars.at(i) = some_value;
    }
}

double myclass::method(int i) {
    return this->pars.at(i); 
}

我可以在构造函数中看到元素到向量中。但是,myclass::method(int i)始终返回0,数组this->pars的大小为0.任何建议?

我已在单独的头文件中声明pars

class myclass {
    private:
    std::vector<double> pars;
    ...
}

3 个答案:

答案 0 :(得分:1)

您需要将pars作为成员并将其初始化为:

class myclass
{
private:
  std::vector<double> pars;
}

...

pars = std::vector<double>(1000,some_value);

答案 1 :(得分:1)

主要问题

在你的构造函数中:

myclass::myclass() {       
    std::vector<double> pars(1000);
    for (int i = 0; i < 1000; i++) {
    pars.at(i) = some_value;
    }
}

您正在声明一个本地pars对象,因此只能在构造函数块中共享,而不是整个类。

我可以在其中看到其他语言的影响,但在C ++类中,必须在类声明/定义本身中声明成员:

class myclass {
private:
    std::vector<double> pars;
public:
    ...
};

然后在构造函数中,您可以使用初始化列表将参数传递给成员构造函数:

myclass::myclass() : pars (1000) { ... }
//                 ^^^^^^^^^^^^^

一些提示

请注意,在C ++中,您不需要使用this->为成员变量访问加前缀。

最后,您可以使用std::vector的构造函数生成某个元素的n个副本:

myclass::myclass() : pars (1000, element) { ... }

另外,您可以在<algorithm>中使用std::fill来填充整个容器:

std::fill(pars.begin(), pars.end(), element);

答案 2 :(得分:0)

您需要将pars更改为成员变量,如下所示。

class myclass {
public:
    myclass();
    double method(int i);

private:
    std::vector<double> m_pars;
    double myclass::method(int i);
};

double myclass::method(int i) {
    return this->m_pars.at(i); 
}

考虑使用std::vectorstd::fill的构造函数,而不是循环遍历值。