我想將變換應用於shared_ptr
並存儲到shared_ptr
,同時也使用類中的函數。C++ 11與shared_ptr轉換爲向量和類
我建立這個例子:
#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;
}
如可以看到的here這導致分段轉儲。任何幫助我如何解決這個問題,這樣的輸出產量{2, 4, 6, }
?
請注意,我使用lambda,因爲我需要它在我的完整實現。
我也試過更換,
transform(numbers->begin(), numbers->end(), result->begin(),
[this](int x){ return factor * x; });
與
transform((*numbers).begin(), (*numbers).end(), (*result).begin(),
[this](int x){ return factor * x; });
謝謝!這樣可行。我用'reserve'和'back_inserter()'。解決方案可以在這裏找到(http://coliru.stacked-crooked.com/a/188945e985a51137)。 – Stereo