我承认我很难对此做出合理的描述。我想不出一个好词来准确描述我正在寻找的东西。也许这可以称为切片迭代器。
假设我有这样的东西:
struct S
{
int i;
char *s;
float f;
};
std::vector<S> v(10);
我正在寻找一种构造迭代器的方法,它将指向 S
的成员。我希望能够将它传递给 std::min_element
之类的东西,而无需在每种情况下都创建谓词。可能看起来像这样的东西:
std::min_element(slicing_iterator(v.begin(), S::f), slicing_iterator(v.end(), S::f));
我可以使用任何模板技巧来实现这一目标吗?或者它可能已经在 Boost 或其他库中的某个地方完成了?
最佳答案
如果您正在寻找一个将 S 转换为其 S::f 的迭代器,这当然可以使用 boost 来完成(不可能吗?):
std::cout << *std::min_element(
boost::make_transform_iterator(v.begin(), boost::bind(&S::f, _1)),
boost::make_transform_iterator(v.end(), boost::bind(&S::f, _1))
) << '\n';
但是如果你正在寻找 S::f 在 vector 中最小的 S,谓词是最合理的方法。
关于c++ - 对象成员的迭代器 "pointing",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5831073/