[英]Boost Range Library: Traversing Two Ranges Sequentially
Boost范圍庫( http://www.boost.org/doc/libs/1_35_0/libs/range/index.html )允許我們將一對迭代器抽象為一個范圍。 現在我想將兩個范圍合並為一個,即:
給定兩個范圍r1和r2,定義r遍歷[r1.begin(),r1.end()[然后[r2.begin(),r2.end()[。 有沒有辦法使用r1和r2將r定義為范圍?
我再次需要這個,所以我再看看。 有一種方法可以使用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沒有標准的提升功能會給你這種行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.