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

时间:2016-04-15 07:47:54

标签: c++ pointers shared-ptr smart-pointers

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

2 个答案:

答案 0 :(得分:1)

viewDidDisappear

m_buffer = 3.14 * i; 的类型为m_buffer。你的任命毫无意义。你可能想写:

std::shared_ptr

此外,您还要在for循环中声明*m_buffer = 3.14 * i; ,以便向量中的值基于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);
};

Live demo

答案 1 :(得分:0)

您是否尝试使用vector :: assign?

m.assign(newSize, m_buffer);