gpt4 book ai didi

C++ vector 中的最小元素

转载 作者:行者123 更新时间:2023-11-28 00:08:47 26 4
gpt4 key购买 nike

我试图找到 vector 中的最小非零距离。所以我使用下面的代码

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";

我遍历一个包含距离列表的 vector ,其中的距离为零,并将 i 处的距离推回到一个新 vector smallest_dist;i 中,只要它们大于 0/.

然后我尝试使用 std::min_element 找到该 double vector 中的最小元素。

它给我一个迭代器错误。谁能帮帮我?

最佳答案

作为

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_ifstd::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
}

关于C++ vector 中的最小元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34098408/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com