C++:修改 share_ptr 个元素的向量

C++: Modify a vector of share_ptr elements

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

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

然后,e被初始化。

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

e->change(4);

其中 class 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 的值,class c_t 使用此函数:

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

您尝试使用 vector::assign 了吗?

m.assign(newSize, m_buffer);
m_buffer = 3.14 * i;

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

*m_buffer = 3.14 * i;

您还想在 for 循环内声明 m_buffer,这样向量中​​的值将根据 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