配列のサイズを自動的に「学習」できます。
template<typename T, size_t N>
void set_data(const T (&w)[N]){
w_.assign(w, w+N);
}
うまくいけば、上記のようにインターフェイスをset_dataに変更できます。それでも、最初の引数としてCスタイルの配列を受け入れます。たまたまそれを参照するだけです。
使い方
[更新:サイズの学習に関するより包括的な議論については、こちらを参照してください]
これはより一般的な解決策です:
template<typename T, size_t N>
void copy_from_array(vector<T> &target_vector, const T (&source_array)[N]) {
target_vector.assign(source_array, source_array+N);
}
これは、配列が配列への参照として渡されるため機能します。C / C ++では、配列を関数として渡すことはできません。代わりに、配列がポインターに減衰し、サイズが失われます。ただし、C ++では、配列への参照を渡すことができます。
参照によって配列を渡すには、型が完全に一致する必要があります。配列のサイズはその型の一部です。これは、テンプレートパラメータNを使用してサイズを学習できることを意味します。
ベクトルを返すこの関数を使用する方が簡単な場合があります。適切なコンパイラ最適化が有効になっていると、これは見かけよりも速くなるはずです。
template<typename T, size_t N>
vector<T> convert_array_to_vector(const T (&source_array)[N]) {
return vector<T>(source_array, source_array+N);
}