升压范围库(http://www.boost.org/doc/libs/1_35_0/libs/range/index.html)允许我们将一对迭代器抽象为一个范围。现在我想将两个范围合并为一个,即:升压范围库:依次遍历两个范围
给出了两个范围r1和r2,定义r遍历[r1.begin(),r1.end()[然后[r2begin(),r2 。结束()[。有什么方法可以将r定义为使用r1和r2的范围?
升压范围库(http://www.boost.org/doc/libs/1_35_0/libs/range/index.html)允许我们将一对迭代器抽象为一个范围。现在我想将两个范围合并为一个,即:升压范围库:依次遍历两个范围
给出了两个范围r1和r2,定义r遍历[r1.begin(),r1.end()[然后[r2begin(),r2 。结束()[。有什么方法可以将r定义为使用r1和r2的范围?
我再次需要这个,所以我有第二次看。有一种方法可以使用boost/range/join.hpp来连接两个范围。不幸的输出范围类型不被包括在所述接口:
#include "boost/range/join.hpp"
#include "boost/foreach.hpp"
#include <iostream>
int main() {
int a[] = {1, 2, 3, 4};
int b[] = {7, 2, 3, 4};
boost::iterator_range<int*> ai(&a[0], &a[4]);
boost::iterator_range<int*> bi(&b[0], &b[4]);
boost::iterator_range<
boost::range_detail::
join_iterator<int*, int*, int, int&,
boost::random_access_traversal_tag> > ci = boost::join(ai, bi);
BOOST_FOREACH(int& i, ci) {
std::cout << i; //prints 12347234
}
}
我发现使用编译器信息的输出类型。 C++ 0x auto
也将在那里相关。
我想你必须做一个自定义的迭代器,它会在到达r1.end()时将'r1.end()滚动到r2.begin()。然后,该迭代器的Begin()和end()将被合并到您的范围r中。 AFAIK没有标准的增强功能,会给你这种行为。