template<typename T, typename F>
auto mapV(vector<T> v, F f) {
vector<T> ret = {};
for(int i=0; i < v.size(); i++) {
ret[i] = f(v[i]);
}
return ret;
}
int main() {
vector<int> v = {1,2,3,4,5,6};
vector<int> b = mapV(v, [](int &t){ return t*2; });
for (int n : b) {
cout << "is " << n << endl;
}
return 0;
}
このコードはコンパイルされますが、実行するとsegfaultが生成されます。テンプレートを使用して一般的に関数を受け入れる正しい方法は何ですか?私は関数の構造も定義したいと思います.Tをとり、Tを返す関数だけを受け入れることができますが、それを表現する方法はあまりよく分かりません。一般的に関数をC++テンプレートに渡す
これは、空のベクターを作成し、私はstd::function<T(T)>
を試みたが、それはうまくいきませんでしたどちらか
あなたは 'ret [i] = ...'で 'ret'の最後を書きます。 – user2357112
ああ、代わりに要素をプッシュする必要がありますか? – leshow
既存の回答を無効にしないでください。代わりに別の質問をしてください。 – Quentin