2008-09-30 48 views

回答

6

我再次需要这个,所以我有第二次看。有一种方法可以使用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也将在那里相关。

0

我想你必须做一个自定义的迭代器,它会在到达r1.end()时将'r1.end()滚动到r2.begin()。然后,该迭代器的Begin()和end()将被合并到您的范围r中。 AFAIK没有标准的增强功能,会给你这种行为。

1
  • 难道你不能调用函数两次,一次是两个范围?或者这种方法有问题吗?
  • 将两个范围复制到一个容器中并传递该范围。
  • 编写你自己的范围类,所以它先遍历r1,然后再遍历r2秒。