Dizinin boyutunu otomatik olarak 'öğrenebilirsiniz':
template<typename T, size_t N>
void set_data(const T (&w)[N]){
w_.assign(w, w+N);
}
Umarım, arayüzü yukarıdaki gibi set_data olarak değiştirebilirsiniz. Hala ilk argüman olarak C stili bir diziyi kabul etmektedir. Sadece referans olarak alır.
Nasıl çalışır
[Güncelleme: Boyutu öğrenme hakkında daha kapsamlı bir tartışma için buraya bakın ]
İşte daha genel bir çözüm:
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);
}
Bu, dizi bir diziye başvuru olarak geçirildiği için çalışır. C / C ++ 'da, bir diziyi işlev olarak geçiremezsiniz, bunun yerine bir işaretçiye bozulur ve boyutu kaybedersiniz. Ama C ++, sen yapabilirsiniz diziye bir başvuru geçmektedir.
Bir diziyi başvuru ile iletmek, türlerin tam olarak eşleşmesini gerektirir. Bir dizinin boyutu türünün bir parçasıdır. Bu, bizim için boyutu öğrenmek için N şablon parametresini kullanabileceğimiz anlamına gelir.
Bir vektör döndüren bu işleve sahip olmak daha da basit olabilir. Geçerli uygun derleyici optimizasyonları ile, bu göründüğünden daha hızlı olmalıdır.
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);
}