Próbuję zastosować transformację do shared_ptr
i zapisać do shared_ptr
, jednocześnie korzystając z funkcji w klasie.C++ 11 transformacja z shared_ptr do wektora i klasy
Stworzyłem ten przykład:
#include <vector>
#include <iostream>
#include <memory>
#include <algorithm>
using namespace std;
class MyClass {
public:
int factor = 0;
MyClass(const int factor_) : factor(factor_) {}
shared_ptr<vector<int> > mult(shared_ptr<vector<int> > numbers) {
shared_ptr<vector<int> > result(new vector<int>());
transform(numbers->begin(), numbers->end(), result->begin(),
[this](int x){ return factor * x; });
return result;
}
};
int main()
{
shared_ptr<vector<int> > numbers(new vector<int>());
shared_ptr<vector<int> > res(new vector<int>());
MyClass times_two(2);
numbers->push_back(1);
numbers->push_back(2);
numbers->push_back(3);
res = times_two.mult(numbers);
cout << "{";
for (unsigned int i = 0; i < res->size(); ++i)
cout << res->at(i) << ", ";
cout << "}";
return 0;
}
Jak widać here To powoduje zrzut segmentacji. Jakąkolwiek pomoc, w jaki sposób mogę rozwiązać ten problem, aby uzyskać dane wyjściowe o wartości {2, 4, 6, }
?
Zauważ, że używam lambda, ponieważ potrzebuję go w mojej pełnej implementacji.
Próbowałem też wymienić,
transform(numbers->begin(), numbers->end(), result->begin(),
[this](int x){ return factor * x; });
z
transform((*numbers).begin(), (*numbers).end(), (*result).begin(),
[this](int x){ return factor * x; });
Dzięki! To działa. Użyłem 'reserve' oraz' back_inserter() '. Rozwiązanie można znaleźć [tutaj] (http://coliru.stacked-crooked.com/a/188945e985a51137). – Stereo