gpt4 book ai didi

c++ - 获取位于特定区间内的已排序值列表的子列表的最短方法

转载 作者:可可西里 更新时间:2023-11-01 17:39:58 25 4
gpt4 key购买 nike

今天我在问自己,获取排序 vector 中所有值的最短代码可能是什么 std::vector<double> , 大于或等于 a小于或等于 b .

我的第一种方法类似于以下内容:

#include <vector>
#include <algorithm>
#include <iterator>
#include <iostream>

// Returns all values in sortedValues being greater equal start and smaller equal end;
std::vector<double> cutValues(const std::vector<double>& sortedValues, double start, double end) {
std::vector<double> ret;

auto startIter=std::lower_bound(sortedValues.begin(), sortedValues.end(), start);
auto stopIter = std::upper_bound(sortedValues.begin(), sortedValues.end(), end);
std::copy(startIter, stopIter, std::back_inserter(ret));
return ret;
}

int main(int argc, char **args) {
{
auto ret = cutValues({ 0.1,0.2,0.3 }, 0.1, 0.3);
std::copy(ret.begin(), ret.end(), std::ostream_iterator<double>(std::cout, ","));
std::cout << std::endl;
}
{
auto ret = cutValues({ 0.12,0.2,0.31 }, 0.1, 0.3);
std::copy(ret.begin(), ret.end(), std::ostream_iterator<double>(std::cout, ","));
std::cout << std::endl;
}
{
auto ret = cutValues({ 0.1,0.2,0.3 }, 0.2, 0.2);
std::copy(ret.begin(), ret.end(), std::ostream_iterator<double>(std::cout, ","));
std::cout << std::endl;
}
}

我的第二个想法很简单,如下所示:

std::vector<double> cutValues2(const std::vector<double>& sortedValues, double start, double end) {
std::vector<double> ret;
std::copy_if(sortedValues.begin(), sortedValues.end(), std::back_inserter(ret), [&start, &end](auto v) { return v >= start && v <= end; });
return ret;
}

但是考虑到只从一个非常大的 vector 中移除一小部分的情况,它可能会有一些效率问题。

现在我问自己,是否有更好的方法来做到这一点?

最佳答案

第一个版本有点变化:

std::vector<double> cutValues(const std::vector<double>& sortedValues, double start, double end) {
auto startIter = std::lower_bound(sortedValues.begin(), sortedValues.end(), start);
auto stopIter = std::upper_bound(startIter, sortedValues.end(), end);
return std::vector<double>(startIter, stopIter);
}

关于c++ - 获取位于特定区间内的已排序值列表的子列表的最短方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45751009/

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