gpt4 book ai didi

c++ - 将迭代器映射到特定字段上的迭代器(可以使用 Boost)

转载 作者:搜寻专家 更新时间:2023-10-31 02:13:26 26 4
gpt4 key购买 nike

假设我有一个适用于整数范围的特定算法。然后该函数将在此范围内采用两个迭代器并执行其工作。

template <typename It>
void doWork(It begin, It end) {
int x = *begin; // range is over integers
// ...
}

假设我有两个数据结构:

struct S { int x; }

using TupleList = std::vector<std::tuple<int, double>>;
using SList = std::vector<S>;

我想在 TupleListSList 上(分别)使用该算法。但是,直接迭代器将不起作用,因为 TupleListSList 不直接包含整数。

一个解决方案是另外向算法传递一个仿函数来解包迭代器:

template <typename It, typename Unwrap>
void doWork(It begin, It end, Unwrap unwrap) {
int x = unwrap(*begin);
// And so on
}
// -----
auto Sunwrapper = [](const S& s) { return s.x; }
doWork(begin(Slist), end(Slist), Sunwrapper);

但我更愿意保持功能整洁。在 C++(加上 Boost)中有没有一种方法可以从这样的解包函数自动创建迭代器?

auto unwrappedBegin = some_magical_factory(begin(Slist), Sunwrapper);
auto unwrappedEnd = some_magical_factory(end (Slist), Sunwrapper);

doWork(unwrappedBegin, unwrappedEnd);

最佳答案

boost::transform_iterator 似乎是一个合适的适配器。只需将 some_magical_factory 替换为 boost::make_transform_iterator,包括适当的 header ,它应该可以工作。

关于c++ - 将迭代器映射到特定字段上的迭代器(可以使用 Boost),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41441940/

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