gpt4 book ai didi

c++ - 使用 std::find_if 将迭代器传递给一元谓词

转载 作者:行者123 更新时间:2023-11-30 01:38:10 25 4
gpt4 key购买 nike

我正在尝试查找索引,i ,一个 vector 的元素,v ,满足:v[i] <= x < v[i + 1] , 其中x是给定的任意值。我正在尝试使用 find_if功能,但似乎 find_if从迭代器而不是迭代器传递值,因此我无法找到执行 x < v[i + 1] 的方法比较。有没有一种方法可以用我在下面设置的一元谓词进行比较:

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

//Create predicate for find_if
template<typename T>
struct eq {
eq(const T _x) : x(x) { };

//Does not work
bool operator()(typedef std::vector<T>::iterator it) const { //
return *it <= x && x < *(++it);
}
private:
T x;
};

//Make vector
std::vector<double> vDouble;
vDouble.push_back(1.5);
vDouble.push_back(3.1);
vDouble.push_back(12.88);
vDouble.push_back(32.4);

double elemVal = *std::find_if(vNumeric.begin(), vNumeric.end(), eq<double>(13.0));

最佳答案

使用 std::adjacent_find,你可以简单地做:

const auto x = 13.0;
auto it = std::adjacent_find(v.begin(), v.end(),
[x](double lhs, double rhs){ return lhs <= x && x < rhs; });

Demo

关于c++ - 使用 std::find_if 将迭代器传递给一元谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48494557/

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