我正在尝试使用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;
...
}
答案 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::vector
或std::fill
的构造函数,而不是循环遍历值。