我正在尝试在向量中找到最小的非零距离。所以我使用下面的代码
vector<double> smallest_dist;
for (int i = 0; i < dist.size(); i++) {
while (dist.at(i) > 0){
smallest_dist.push_back(dist.at(i));
}
}
auto smallest = std::min_element(std::begin(smallest_dist), std::end(smallest_dist));
std::cout<<"smallest"<<*smallest<<endl;
cout<<"\n\n\n";
我浏览一个向量,其中列出的距离为零,只要它们大于0,就会将i
的距离推回到新的向量smallest_dist;
。
然后我尝试使用std::min_element
来找到双向量中的最小元素。
它给了我一个迭代器错误。有人能帮助我吗?
答案 0 :(得分:2)
作为
while (dist.at(i) > 0){
smallest_dist.push_back(dist.at(i));
}
如果在dist
中实际存在大于0的某个元素,那么将是一个无限循环,但是您确实到达了输出代码,我们可以得出smallest_dist
为空的结论。
因此,std::min_element
将返回std::end(smallest_dist)
,您无法取消引用该内容。
相反,while
应为if
,并且对std::min_element
的调用之前应进行一些错误检查,断言smallest_dist
不为空。
备注:您实际上并不需要手工制作的循环,您可以使用std::copy_if
和std::back_inserter
收集所有积极因素:
std::vector<double> smallest_dist;
std::copy_if(std::begin(dist), std::end(dist),
std::back_inserter(smallest_dist), [](const auto &v){return v > 0;});
if (smallest_dist.empty()) {
// No distance greater than 0, do error handling
}
答案 1 :(得分:1)
你有一个无限循环。将while
替换为if
。