C++ 什么';获得自适应迭代器是一种快速而肮脏的方法吗?

C++ 什么';获得自适应迭代器是一种快速而肮脏的方法吗?,c++,iterator,range,adapter,C++,Iterator,Range,Adapter,我有一些(模板化的)迭代器对迭代器begin1和迭代器end1。我有一个函数foo,有签名 template <typename ForwardIterator> void foo(ForwardIterator begin, ForwardIterator end); 或 ?Eric Niebler的库为此提供了一个非常好的解决方案,并计划包含在未来的标准中。下面是一个简单的例子: std::vector<int> vi{1, 2, 3, 4, 5, 6, 7, 8,

我有一些(模板化的)迭代器对
迭代器begin1
迭代器end1
。我有一个函数foo,有签名

template <typename ForwardIterator>
void foo(ForwardIterator begin, ForwardIterator end);

Eric Niebler的库为此提供了一个非常好的解决方案,并计划包含在未来的标准中。下面是一个简单的例子:

std::vector<int> vi{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
using namespace ranges;
auto rng = vi | view::transform([](int x){ return x % 2; });
foo(rng.begin(), rng.end());  // When foo dereferences these iterators, it
                              // will see: [1, 0, 1, 0, 1, 0, 1, 0, 1, 0].
向量vi{1,2,3,4,5,6,7,8,9,10}; 使用名称空间范围; auto rng=vi | view::transform([](int x){return x%2;}); foo(rng.begin(),rng.end());//当foo取消引用这些迭代器时,它 //将看到:[1,0,1,0,1,0,1,0,0,1,0]。
顺便说一句,这些都是懒惰和高效的

试试@eric niebler's,它最终会达到标准!是另一个吗alternative@BrianRodriguez:你能更具体/明确地回答吗?@einpoklum好的,完成了。@BrianRodriguez:我已经+1你了,我的朋友:-)。。。但它只是基于一种令人印象深刻的、但就软件包而言还是有点模糊的依赖性而快速而肮脏。
auto new_pair = magic(begin, end);
foo(new_pair.first, new_pair.second);
std::vector<int> vi{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
using namespace ranges;
auto rng = vi | view::transform([](int x){ return x % 2; });
foo(rng.begin(), rng.end());  // When foo dereferences these iterators, it
                              // will see: [1, 0, 1, 0, 1, 0, 1, 0, 1, 0].