VS2008 дает мне предупреждение о двойном преобразовании в число с плавающей точкой. Как мне избавиться от этого предупреждения?
void some_function(double *darray){
vector<double> fvector;
fvector.insert(fvector.begin(), darray, darray + 10);
}
Или
void some_function(float *darray){
vector<float> fvector;
fvector.insert(fvector.begin(), darray, darray + 10);
}
Или перегрузите вашу функцию обоими вариантами, или сделайте ее шаблоном
template<typename RandomAccessIterator>
void some_function(RandomAccessIterator it){
typedef typename iterator_traits<RandomAccessIterator>::value_type value_type;
vector<value_type> fvector(it, it + 10);
}
Конечно, не стоит предполагать фиксированный 10
. Обратите внимание, что ни ваш исходный код не является безопасным, потому что 10
в списке параметров вашей функции не имеет значения. Это просто игнорируется. Так лучше документировать это ясно, что итератор или указатель должен предоставить доступ к достаточно большому количеству значений.