方法的参数列表出错



使用此线程作为帮助,我想计算两个向量之间的距离。所以我的方法是:

template <typename T>
double  vectors_distance(vector<double> vec1, vector<double> vec2) {
std::vector<double> aux;
std::transform(vec1.begin(), vec1.end(), vec2.begin(), std::back_inserter(aux), 
[](double element1, double element2) {return pow((element1 - element2), 2); 
});
aux.shrink_to_fit();
return  std::sqrt(std::accumulate(aux.begin(), aux.end(), 0.0));
}

在另一种方法中,我创建了两个vector<double> numbers, numbers1并用一些值填充它们,如下所示:

stringstream ss(coordSynth);
double num;
while (ss >> num) {
numbers.push_back(num);
cout << typeid(numbers).name() << endl;
}

编辑:

作为背景知识:coordSynth是一个字符串,其中包含doubles作为值(即:"0.0, 45.3, 2.0"(。对于number1发生完全相同的情况(与number一样(。 好的,现在我打电话给vectors_distance(numbers, numbers1);并得到错误E0304 No instance of function template "vectors_distance" matches the argument list..但是怎么做呢?我的方法正好有两个参数,我也放了两个向量?

原因是您已将函数指定为模板,但两个函数参数都与模板参数无关。

如果您希望该函数仅适用于std::vector<double>,则该函数不需要是模板。

double  vectors_distance(vector<double> vec1, vector<double> vec2)
{
// same body you have
}

如果您希望函数适用于std::vector<T>(假设T是可以提供给pow()等的类型(,则将其保留为模板,并在函数中将double更改为T。 例如;

template <typename T>
T vectors_distance(vector<T> vec1, vector<T> vec2)
{
// same function body, but replace "double" by "T" everywhere
}

其他几点评论。

首先,通常最好通过const引用而不是值传递std::vector参数。

其次,没有必要构建一个临时向量来保存中间结果。 只需使用更好的算法即可。 例如,可以编写非模板版本

double  vectors_distance(const vector<double> &vec1, const vector<double> &vec2)
{
return std::sqrt(
std::inner_product(vec1.begin(), vec1.end(), vec2.begin(), 0.0,
std::plus<double>(),
[](double e1, double e2) {return (e1-e2)*(e1-e2);}
)
);
}

阅读std::inner_product()文档以了解其作用。

最新更新