2008-09-30 65 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秒。