Reputation: 2594
In a C++ program, I declare a variable e in this way:
shared_ptr<c_t> e = shared_ptr<c_t> (new c_t);
Then, e is initialized.
Later in the program, I want to resize e, using this function:
e->change(4);
Where the class c_t and the function c_t::change are defined as:
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;
};
};
However, this approach does not work. When I use an iterator to read e, I get that the values of e are inf. Why? How should I change e?
Edit: To read, actually to scale, the values of e, the class c_t uses this function:
void scaling(double factor) {
for (auto it = m.begin(); it != m.end(); ++it) {
m *= factor;
};
};
Upvotes: 1
Views: 279
Reputation: 4232
m_buffer = 3.14 * i;
m_buffer
is of type std::shared_ptr
. Your assignement makes no sense. You probably wanted to write:
*m_buffer = 3.14 * i;
Also you want to declare m_buffer
inside the for loop so the values in the vector will have different values based on 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);
};
Or a shorter version:
for(int i = 0; i < n; i++)
{
mm.push_back(std::make_shared<double>(3.14 * i));
};
Upvotes: 1
Reputation: 1315
Did you try to use vector::assign?
m.assign(newSize, m_buffer);
Upvotes: 0