在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;
};
};
答案 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);
};
答案 1 :(得分:0)
您是否尝试使用vector :: assign?
m.assign(newSize, m_buffer);