gpt4 book ai didi

C++:修改 shared_ptr 元素的 vector

转载 作者:行者123 更新时间:2023-11-30 05:28:48 24 4
gpt4 key购买 nike

在 C++ 程序中,我这样声明一个变量 e:

shared_ptr<c_t> e = shared_ptr<c_t> (new c_t);

然后,e 被初始化。

在程序的后面,我想调整 e 的大小,使用这个函数:

e->change(4);

其中类 c_t 和函数 c_t::change 定义为:

class c_t {

public:
vector<shared_ptr<double>> m;

void change(int n) {
vector<shared_ptr<c_double>> mm;
shared_ptr<double> m_buffer = make_shared<c_double>();
for(int i = 0; i < n; i++) {
m_buffer = 3.14 * i;
mm.push_back(m_buffer);
};
m = mm;
};
};

但是,这种方法行不通。当我使用迭代器读取 e 时,我得到 e 的值是 inf。为什么?我应该如何更改e

编辑:要读取(实际上是缩放)e 的值,c_t 类使用此函数:

void scaling(double factor) {
for (auto it = m.begin(); it != m.end(); ++it) {
m *= factor;
};
};

最佳答案

m_buffer = 3.14 * i;

m_bufferstd::shared_ptr 类型。你的分配没有意义。你可能想写:

*m_buffer = 3.14 * i;

您还想在 for 循环内声明 m_buffer,这样 vector 中​​的值将根据 i 具有不同的值。

for(int i = 0; i < n; i++)
{
std::shared_ptr<double> m_buffer = std::make_shared<double>();
*m_buffer = 3.14 * i;
mm.push_back(m_buffer);
};

或更短的版本:

for(int i = 0; i < n; i++)
{
mm.push_back(std::make_shared<double>(3.14 * i));
};

Live demo

关于C++:修改 shared_ptr 元素的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36641224/

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