c++ - 对象成员的迭代器 "pointing"

标签 c++ stl iterator

我承认我很难对此做出合理的描述。我想不出一个好词来准确描述我正在寻找的东西。也许这可以称为切片迭代器

假设我有这样的东西:

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

测试:https://ideone.com/jgcHr

但是如果你正在寻找 S::f 在 vector 中最小的 S,谓词是最合理的方法。

关于c++ - 对象成员的迭代器 "pointing",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5831073/

相关文章:

c++ - 将大型多样本音频文件加载到内存中进行播放 - 如何避免临时卡住

c++ - 功能设计

c++ - io_service::strand 的 num_implementations 背后的 boost::asio 推理

c++ - 将 std::map 数据复制到另一个 map

java - 迭代器删除与 ArrayList 删除之间的区别?

c++ - 如何更新文件中特定行的数据?

c++ - 维护 std::priority_queue 的堆属性

c++ - 如何从 C++ 中的流执行快速格式化输入?

python - 为什么 Python 迭代器需要一个只返回 self 的迭代器方法?

c++ - 如何按一种度量对元素进行排序