我承认我很难找到合理的描述.我想不出一个能够准确描述我正在寻找什么的好词.也许这可以称为切片迭代器.
假设我有这样的事情:
struct S
{
int i;
char *s;
float f;
};
std::vector<S> v(10);
Run Code Online (Sandbox Code Playgroud)
我正在寻找的是一种构造迭代器的方法,它将指向一个成员S.我希望能够将它传递给类似于std::min_element在每种情况下都不创建谓词的东西.可能看起来像这样的东西:
std::min_element(slicing_iterator(v.begin(), S::f), slicing_iterator(v.end(), S::f));
Run Code Online (Sandbox Code Playgroud)
有没有我可以用来实现这个的模板技巧?或许它已经在Boost或其他一些图书馆的某个地方完成了?
Cub*_*bbi 13
如果你正在寻找一个将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';
Run Code Online (Sandbox Code Playgroud)
但是如果你正在寻找其S :: f在向量中最小的S,则谓词是最合理的方法.