배열의 크기를 자동으로 '학습'할 수 있습니다.
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);
}