gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:41:53 24 4
gpt4 key购买 nike

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

代码看起来很像下面这样:

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);
}

我可以在构造函数中看到 vector 中的元素。然而,myclass::method(int i) 总是返回 0 并且数组 this->pars 的大小为 0。有什么建议吗?

我在一个单独的头文件中声明了pars:

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

最佳答案

主要问题

在你的构造函数中:

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

您正在声明本地 pars对象,因此它只在构造函数 block 内共享,而不是整个类。

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

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

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

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

一些技巧

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

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

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

或者您可以使用 std::fill <algorithm>在创建容器后填充整个容器:

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

关于c++ - 访问在类构造函数中创建的 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27120349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com