shared_ptr
に変換を適用し、クラス内の関数を使用してshared_ptr
に格納しようとしています。shared_ptrでベクトルとクラスへの変換
私は、この例で作成しました:これは、セグメンテーション・ダンプを引き起こしhere見ることができるように
#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;
}
を。出力が{2, 4, 6, }
になるようにこれを解決する方法についての助け?
ラムダを使用することに注意してください。これは、私が完全実装で必要とするためです。
私はあなたが新しい、空のベクターを構築し、交換することも
transform((*numbers).begin(), (*numbers).end(), (*result).begin(),
[this](int x){ return factor * x; });
ありがとうございます!それは動作します。私は 'reserve'と' back_inserter() 'を使いました。解決策は[ここ](http://coliru.stacked-crooked.com/a/188945e985a51137)で見つけることができます。 – Stereo